Springbootカスタム変換処理springmvcがjsonを返すときの各タイプがnullの場合
以前は直接ライブラリを調べてエンティティクラスを返し、ライブラリフィールドがnullの場合、jsonの場合、フィールドがnullの場合
1、第一の解決方案
@JsonInclude(JsonInclude.Include.NON_NULL)を使用して、nullフィールドを無視し、値のあるパラメータを直接返します.
しかし、フロントエンドはすべてのフィールドを望んでおり、タイプに応じて空にしなければならないためnullではなく、類似している(Stringタイプの戻り")、Integerタイプの戻り0).
オンラインクエリはすべてObjectMapperを直接修正し、serializerをnullに設定するときに空の文字列を直接設定しますが、stringにかかわらずintegerはnullに設定されます.だから2つ目の案を採用します
2、第二の解決方案
BeanSerializerModifierを継承
対応処理のタイプnull
集合Array
Integer数字()
String文字列
最後にBeanSerializerModifierのMybeanSerializeModifierをObjectMapperに設定して処理し、@Configuration注記でspring管理に渡します.コードは以下の通りです.
プロジェクトが使用するマイクロサービスであるため、カスタム注釈を各サービスに提供するために定義すると、単一のプロジェクトは上記の手順でよい.
上にあります.自分の記録としても、それが必要な人には役に立つことを願っています.
参考ブログ:https://www.cnblogs.com/lic309/p/5048631.html
1、第一の解決方案
@JsonInclude(JsonInclude.Include.NON_NULL)を使用して、nullフィールドを無視し、値のあるパラメータを直接返します.
しかし、フロントエンドはすべてのフィールドを望んでおり、タイプに応じて空にしなければならないためnullではなく、類似している(Stringタイプの戻り")、Integerタイプの戻り0).
オンラインクエリはすべてObjectMapperを直接修正し、serializerをnullに設定するときに空の文字列を直接設定しますが、stringにかかわらずintegerはnullに設定されます.だから2つ目の案を採用します
2、第二の解決方案
BeanSerializerModifierを継承
public class MyBeanSerializerModifier extends BeanSerializerModifier {
private JsonSerializer
対応処理のタイプnull
集合Array
public class MyNullArrayJsonSerializer extends JsonSerializer {
@Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
if (value == null) {
jgen.writeStartArray();
jgen.writeEndArray();
} else {
jgen.writeObject(value);
}
}
}
Integer数字()
public class MyNullIntegerJsonSerializer extends JsonSerializer {
@Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
if (value == null) {
jgen.writeNumber(0);
}
}
}
String文字列
public class MyNullStringJsonSerializer extends JsonSerializer {
@Override
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
if (value == null) {
jgen.writeString("");
}
}
}
最後にBeanSerializerModifierのMybeanSerializeModifierをObjectMapperに設定して処理し、@Configuration注記でspring管理に渡します.コードは以下の通りです.
@Configuration
public class ClassJsonConfiguration {
@Bean
public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() {
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = converter.getObjectMapper();
// mapper SerializerModifier Factory, modifier : , null
mapper.setSerializerFactory(mapper.getSerializerFactory().withSerializerModifier(new MyBeanSerializerModifier()));
return converter;
}
}
プロジェクトが使用するマイクロサービスであるため、カスタム注釈を各サービスに提供するために定義すると、単一のプロジェクトは上記の手順でよい.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ClassJsonConfiguration.class)
@Documented
public @interface EnableClassJsonConfig {
}
上にあります.自分の記録としても、それが必要な人には役に立つことを願っています.
参考ブログ:https://www.cnblogs.com/lic309/p/5048631.html