SpringBootシリーズの戻りJSONデータ及びフォーマットパッケージ
10535 ワード
主な内容:
Controllerで
Spring Bootでデフォルトで使用されているJson解析技術フレームワークはjacksonjacksonにおけるnullの処理(プロファイル重要)FastJsonとjacksonの比較FastJsonのnullに対する処理(プロファイル重要)結果カプセル化オブジェクトを統一的に返す(コード重要)戻りコード定義統一結果列挙オブジェクト(コード重要)一、
プロジェクト開発では,インタフェースとインタフェースの間,前後端間のデータの転送にJson形式が用いられているが,Spring BootではインタフェースがJson形式のデータを返すのは簡単である.
Controllerで
Spring Bootの中で依存に対してすべてとても良いパッケージをして、多くの
実際のプロジェクトでは、よく使われるデータ構造はクラスオブジェクト、Listオブジェクト、Mapオブジェクトにほかならないが、デフォルトのjacksonフレームワークがこの3つのよく使われるデータ構造をjsonに変換した後のフォーマットは
オブジェクト
{「id」:1,「username」:「倪升武」,「password」:「123456」}
しゅうごう
[{「id」:1,「username」:「倪升武」,「password」:「123456」},{「id」:2,「username」:「達人課」,「password」:「123456」}]
Map
{"作者情報":{"id":1,"username":"倪升武","password":"123456"},"CSDNアドレス":"http://blog.csdn.net/eson_15」、「ファン数」:4153、「ブログアドレス」:」http://blog.itcodai.com"}
二、jacksonにおけるnullの処理
実際のプロジェクトでは、null値が現れるのは避けられません.jsonを回転するときは、これらのnullが現れることを望んでいません.例えば、すべてのnullがjsonを回転するときに「」という空の文字列になることを望んでいません.どうすればいいですか.Spring Bootでは、構成をして新しい
jacksonの構成クラス:
テストコード
プロジェクトを再起動し、テストは(jacksonがすべてのnullフィールドを空の文字列に変換した)結果を返します.
{「作者情報」:{「id」:1,「username」:「倪昇武」,「password」:「},「CSDNアドレス」:「」,「ファン数」:4153,「ブログアドレス」:「http://blog.itcodai.com"}
三、アリババのFastJson
3.1 jacksonとfastJsonの対比
オプション
fastJson
jackson
使いやすさ
やさしい
中程度
高度な機能サポート
中程度
豊富
公式ドキュメント、Exampleサポート
中国語
英語
処理json速度
やや速い
速い
拡張的に見ると、fastJsonはjacksonほど柔軟ではありません.スピードや難易度から見ると、fastJsonは私たちのプロジェクトで現在アリのfastJsonを使っていることを考えることができます.便利です.
3.2 fastJson依存インポート
3.3 fastJsonを使用してnullを処理する
fastJsonを使用する場合nullに対する処理はjacksonと若干異なり継承する必要がある
四、統一リターンフォーマットパッケージ
4.1一括返却フォーマット
プロジェクトでは、応答をjsonにカプセル化して返します.一般的には、すべてのインタフェースのデータフォーマットを統一し、フロントエンド(iOS Android、Web)のデータ操作をより一貫させ、容易にします.一般的に、統合戻りデータフォーマットには固定されたフォーマットはなく、戻りデータの状態や戻りたい具体的なデータを明確に記述できればよい.ただし、通常はステータスコード、リターンメッセージ、データのいくつかの部分が含まれます.定義された統合は、次の結果を返します.
{「success」:ブール、//応答が成功したかどうか「code」:数字、//応答コード「message」:文字列、//戻りメッセージ「data」:HashMap//戻りデータ、キー値ペアに置く}
4.2統一リターン結果の定義
1)リターンコード定義列挙クラスの作成
2)一括返却オブジェクトクラスの作成
Controllerで
@RestController
注記を使用してJson形式のデータを返します.Spring Bootでデフォルトで使用されているJson解析技術フレームワークはjacksonjacksonにおけるnullの処理(プロファイル重要)FastJsonとjacksonの比較FastJsonのnullに対する処理(プロファイル重要)結果カプセル化オブジェクトを統一的に返す(コード重要)戻りコード定義統一結果列挙オブジェクト(コード重要)一、
@RestController
注記プロジェクト開発では,インタフェースとインタフェースの間,前後端間のデータの転送にJson形式が用いられているが,Spring BootではインタフェースがJson形式のデータを返すのは簡単である.
Controllerで
@RestController
注記を使用してJson形式のデータを返します.@RestController
Spring Bootに追加された注釈でもあります.この注釈には含まれています.@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
String value() default "";
}
@RestController
注釈には、元の@Controller
と@ResponseBody
注釈が含まれていることがわかります.Springを使用した友人は@Controller
注釈についてよく知っています.ここでは説明しません.@ResponseBody
注釈は、返されるデータ構造をJsonフォーマットに変換します.したがって、デフォルトでは、@RestController
注釈を使用して返されるデータ構造をJson形式に変換し、Spring Bootでデフォルトで使用されるJson解析技術フレームワークはjacksonである.ポイントをつけましょうxmlのspring-boot-starter-web
依存は、spring-boot-starter-json
依存を見ることができます.
org.springframework.boot
spring-boot-starter-json
2.0.3.RELEASE
compile
Spring Bootの中で依存に対してすべてとても良いパッケージをして、多くの
spring-boot-starter-xxx
シリーズの依存を見ることができて、これはSpring Bootの特徴の1つで、人為的に多くの関連する依存を導入する必要はありませんて、starter-xxxシリーズは直接すべて必要な依存を含んで、だから私達は再び上のこのspring-boot-starter-json
依存をクリックして、見ることができます:
com.fasterxml.jackson.core
jackson-databind
2.9.6
compile
com.fasterxml.jackson.datatype
jackson-datatype-jdk8
2.9.6
compile
com.fasterxml.jackson.datatype
jackson-datatype-jsr310
2.9.6
compile
com.fasterxml.jackson.module
jackson-module-parameter-names
2.9.6
compile
実際のプロジェクトでは、よく使われるデータ構造はクラスオブジェクト、Listオブジェクト、Mapオブジェクトにほかならないが、デフォルトのjacksonフレームワークがこの3つのよく使われるデータ構造をjsonに変換した後のフォーマットは
オブジェクト
{「id」:1,「username」:「倪升武」,「password」:「123456」}
しゅうごう
[{「id」:1,「username」:「倪升武」,「password」:「123456」},{「id」:2,「username」:「達人課」,「password」:「123456」}]
Map
{"作者情報":{"id":1,"username":"倪升武","password":"123456"},"CSDNアドレス":"http://blog.csdn.net/eson_15」、「ファン数」:4153、「ブログアドレス」:」http://blog.itcodai.com"}
二、jacksonにおけるnullの処理
実際のプロジェクトでは、null値が現れるのは避けられません.jsonを回転するときは、これらのnullが現れることを望んでいません.例えば、すべてのnullがjsonを回転するときに「」という空の文字列になることを望んでいません.どうすればいいですか.Spring Bootでは、構成をして新しい
jacksonの構成クラス:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import java.io.IOException;
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer
テストコード
@RequestMapping("/map")
public Map getMap() {
Map map = new HashMap<>(3);
User user = new User(1, " ", null);
map.put(" ", user);
map.put(" ", "http://blog.itcodai.com");
map.put("CSDN ", null);
map.put(" ", 4153);
return map;
}
プロジェクトを再起動し、テストは(jacksonがすべてのnullフィールドを空の文字列に変換した)結果を返します.
{「作者情報」:{「id」:1,「username」:「倪昇武」,「password」:「},「CSDNアドレス」:「」,「ファン数」:4153,「ブログアドレス」:「http://blog.itcodai.com"}
三、アリババのFastJson
3.1 jacksonとfastJsonの対比
オプション
fastJson
jackson
使いやすさ
やさしい
中程度
高度な機能サポート
中程度
豊富
公式ドキュメント、Exampleサポート
中国語
英語
処理json速度
やや速い
速い
拡張的に見ると、fastJsonはjacksonほど柔軟ではありません.スピードや難易度から見ると、fastJsonは私たちのプロジェクトで現在アリのfastJsonを使っていることを考えることができます.便利です.
3.2 fastJson依存インポート
com.alibaba
fastjson
1.2.35
3.3 fastJsonを使用してnullを処理する
fastJsonを使用する場合nullに対する処理はjacksonと若干異なり継承する必要がある
WebMvcConfigurationSupport
クラスを上書きconfigureMessageConverters
メソッドでは、null変換を実現するシーンを選択して構成すればよい.次のようになります.import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class fastJsonConfig extends WebMvcConfigurationSupport {
/**
* FastJson JSON MessageConverter
* @param converters
*/
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(
// map
SerializerFeature.WriteMapNullValue,
// String null ""
SerializerFeature.WriteNullStringAsEmpty,
// Number null 0
SerializerFeature.WriteNullNumberAsZero,
// List null []
SerializerFeature.WriteNullListAsEmpty,
// Boolean null false
SerializerFeature.WriteNullBooleanAsFalse,
//
SerializerFeature.DisableCircularReferenceDetect);
converter.setFastJsonConfig(config);
converter.setDefaultCharset(Charset.forName("UTF-8"));
List mediaTypeList = new ArrayList<>();
// , Controller @RequestMapping produces = "application/json"
mediaTypeList.add(MediaType.APPLICATION_JSON);
converter.setSupportedMediaTypes(mediaTypeList);
converters.add(converter);
}
}
四、統一リターンフォーマットパッケージ
4.1一括返却フォーマット
プロジェクトでは、応答をjsonにカプセル化して返します.一般的には、すべてのインタフェースのデータフォーマットを統一し、フロントエンド(iOS Android、Web)のデータ操作をより一貫させ、容易にします.一般的に、統合戻りデータフォーマットには固定されたフォーマットはなく、戻りデータの状態や戻りたい具体的なデータを明確に記述できればよい.ただし、通常はステータスコード、リターンメッセージ、データのいくつかの部分が含まれます.定義された統合は、次の結果を返します.
{「success」:ブール、//応答が成功したかどうか「code」:数字、//応答コード「message」:文字列、//戻りメッセージ「data」:HashMap//戻りデータ、キー値ペアに置く}
4.2統一リターン結果の定義
1)リターンコード定義列挙クラスの作成
package com.test.common.constants;
import lombok.Getter;
@Getter
public enum ResultCodeEnum {
SUCCESS(true, 20000," "),
UNKNOWN_REASON(false, 20001, " "),
BAD_SQL_GRAMMAR(false, 21001, "sql "),
JSON_PARSE_ERROR(false, 21002, "json "),
PARAM_ERROR(false, 21003, " "),
FILE_UPLOAD_ERROR(false, 21004, " "),
EXCEL_DATA_IMPORT_ERROR(false, 21005, "Excel ");
private Boolean success;
private Integer code;
private String message;
private ResultCodeEnum(Boolean success, Integer code, String message) {
this.success = success;
this.code = code;
this.message = message;
}
}
2)一括返却オブジェクトクラスの作成
package com.test.common.vo;
@Data
@ApiModel(value = " ")
public class Result {
@ApiModelProperty(value = " ")
private Boolean success;
@ApiModelProperty(value = " ")
private Integer code;
@ApiModelProperty(value = " ")
private String message;
@ApiModelProperty(value = " ")
private Map data = new HashMap();
private Result(){}
public static Result ok(){
Result r = new Result ();
r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
r.setCode(ResultCodeEnum.SUCCESS.getCode());
r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
return r;
}
public static Result error(){
Result r = new Result ();
r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess());
r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode());
r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage());
return r;
}
public static Result setResult(ResultCodeEnum resultCodeEnum){
Result r = new Result ();
r.setSuccess(resultCodeEnum.getSuccess());
r.setCode(resultCodeEnum.getCode());
r.setMessage(resultCodeEnum.getMessage());
return r;
}
public Result success(Boolean success){
this.setSuccess(success);
return this;
}
public Result message(String message){
this.setMessage(message);
return this;
}
public Result code(Integer code){
this.setCode(code);
return this;
}
public Result data(String key, Object value){
this.data.put(key, value);
return this;
}
public Result data(Map map){
this.setData(map);
return this;
}
}