Springbootはフロントエンドオブジェクトnullを返して空の文字列に変換する
3635 ワード
モバイル端末のインタフェースをテストするとき、携帯電話端末の開発者は私たちに返却対象nullを空の文字列に変えて、ページがnullを表示するのが美しくないと思っています.私は彼らに携帯電話で判断させておけばよかったが、彼らはとても不本意な様子で、実際には怠け者だった.もういい、インターネットで資料を探しました.
その後、nullオブジェクトはすべて空の文字列に変わります.
しかし、携帯電話側はまた嫌がって、配列とオブジェクトは空の文字列を返さないで、[]と{}を返すか、nullを返すかと言っています.
この方法がこんなに横暴で、どう考えても適切ではないのか、この方法に基づいて元のオブジェクトのタイプを判断し、Stringだけが空の文字列を返すと思いますが、残念ながらこの方法は非常に不完全で、オブジェクトのタイプを判断することができません.null値はnull値です.私は別の方法を探すしかなかった.探してみると、適当なコードが見つかりました.
この方法は適切で,null文字列を空文字列に的確に変換できるだけでなく,他にも多くの機能があり,詳細はSerializerFeatureを参照する.
そして、私が大功を成し遂げたと思ったとき、携帯電話側の開発はまたタイムスタンプと戻りパラメータの頭文字の大文字が失効したことを教えてくれました(携帯電話側のインタフェースは極めて規範的ではなく、パラメータは頭文字で書くべきです).これは@JsonFormatと@JsonProperty注釈に対応しています.この2つの注釈はcomに属していることをよく見てください.fasterxml.ジャックソン、そして
WebMvcConfigurerAdapterはcomに属する.alibaba.fastjsonの.これは私をとても憂鬱にさせて、この2つはすべて失効して、それでは私は変換器を使うことができないのではありませんか.モバイル側のニーズを満たすことができないか、lowの判断文字列がnullを「」に変えるしかないか、代替品を見つけてよかった.@JSOnField.
@JSOnField(format="yyyy-MM-dd H:mm:ss")は@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")の代わりに使用できます.
@JSOnField(name="T 3")は@JsonProperty(value="T 3")の代わりに使用できます.
念のため、私は2つの注釈を全部書いて、後でいつでもシステムを変えることができます.
完了
import java.io.IOException;
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 com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
/**
* null
* @author
*
*/
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
SerializerProvider serializerProvider = objectMapper.getSerializerProvider();
serializerProvider.setNullValueSerializer(new JsonSerializer
その後、nullオブジェクトはすべて空の文字列に変わります.
しかし、携帯電話側はまた嫌がって、配列とオブジェクトは空の文字列を返さないで、[]と{}を返すか、nullを返すかと言っています.
この方法がこんなに横暴で、どう考えても適切ではないのか、この方法に基づいて元のオブジェクトのタイプを判断し、Stringだけが空の文字列を返すと思いますが、残念ながらこの方法は非常に不完全で、オブジェクトのタイプを判断することができません.null値はnull値です.私は別の方法を探すしかなかった.探してみると、適当なコードが見つかりました.
import java.util.List;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
@Configuration
public class WebMvcConfigurer extends WebMvcConfigurerAdapter{
@Override
public void configureMessageConverters(List> converters) {
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
converter.setFeatures(SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty,// null
SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.PrettyFormat);
converters.add(converter);
}
}
この方法は適切で,null文字列を空文字列に的確に変換できるだけでなく,他にも多くの機能があり,詳細はSerializerFeatureを参照する.
そして、私が大功を成し遂げたと思ったとき、携帯電話側の開発はまたタイムスタンプと戻りパラメータの頭文字の大文字が失効したことを教えてくれました(携帯電話側のインタフェースは極めて規範的ではなく、パラメータは頭文字で書くべきです).これは@JsonFormatと@JsonProperty注釈に対応しています.この2つの注釈はcomに属していることをよく見てください.fasterxml.ジャックソン、そして
WebMvcConfigurerAdapterはcomに属する.alibaba.fastjsonの.これは私をとても憂鬱にさせて、この2つはすべて失効して、それでは私は変換器を使うことができないのではありませんか.モバイル側のニーズを満たすことができないか、lowの判断文字列がnullを「」に変えるしかないか、代替品を見つけてよかった.@JSOnField.
@JSOnField(format="yyyy-MM-dd H:mm:ss")は@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8")の代わりに使用できます.
@JSOnField(name="T 3")は@JsonProperty(value="T 3")の代わりに使用できます.
念のため、私は2つの注釈を全部書いて、後でいつでもシステムを変えることができます.
完了