MessageConvert

簡要描述:

  • 響應對象序列化配置,在默認的json序列化規(guī)則無法滿足我們的需求時,需要自定義序列化規(guī)則,以下以MappingJackson2HttpMessageConverter為例子

step1:

自定義CustomeMappingJackson2HttpMessageConverter
public class CustomeMappingJackson2HttpMessageConverter extends org.springframework.http.converter.json.MappingJackson2HttpMessageConverter {

    @Override
    protected void writeInternal(Object object, HttpOutputMessage outputMessage)
            throws IOException, HttpMessageNotWritableException {

        JsonEncoding encoding = getJsonEncoding(outputMessage.getHeaders().getContentType());
        JsonGenerator generator = this.objectMapper.getJsonFactory().createJsonGenerator(outputMessage.getBody(), encoding);
        try {
            writePrefix(generator, object);
            Class<?> serializationView = null;
            Object value = object;
            if (value instanceof MappingJacksonValue) {
                MappingJacksonValue container = (MappingJacksonValue) object;
                value = container.getValue();
                serializationView = container.getSerializationView();
            }
            if (serializationView != null) {
                this.objectMapper.writerWithView(serializationView).writeValue(generator, value);
            }
            else {
                this.objectMapper.writeValue(generator, value);
            }
            writeSuffix(generator, object);
            generator.flush();

        }
        catch (JsonProcessingException ex) {
            throw new HttpMessageNotWritableException("Could not write content: " + ex.getMessage(), ex);
        }
    }
}

step2:

servletConfig配置,最重要的是JacksonUtil.getObjectMapper(),獲得自定義的mapper
@Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Charset charset = Charset.forName("UTF-8");
        CustomeMappingJackson2HttpMessageConverter jacksonConverter = new CustomeMappingJackson2HttpMessageConverter();
        jacksonConverter.setObjectMapper(JacksonUtil.getObjectMapper());
        jacksonConverter.setSupportedMediaTypes(Lists.newArrayList(new MediaType("application", "json", charset),
                new MediaType("application", "*+json", charset)));

        StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(charset);
        converters.add(stringConverter);

        converters.add(jacksonConverter);

        converters.add(new FormHttpMessageConverter());
        converters.add(new ByteArrayHttpMessageConverter());

    }
 
 

step3:

統(tǒng)一處理時間格式,null 序列化規(guī)則,timeZone設置,金額格式化,敏感字掩碼等

 // 注冊反序列化
        jacksonMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        // 注冊序列化
        jacksonMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        DefaultSerializerProvider.Impl sp = new DefaultSerializerProvider.Impl();
        // sp.setNullValueSerializer(new NullSerializer());
        jacksonMapper.setSerializerProvider(sp);
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        jacksonMapper.setDateFormat(dateFormat);
        // 時間輸出為時間戳
        jacksonMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);

        jacksonMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));

        jacksonMapper.setSerializerFactory(
                jacksonMapper.getSerializerFactory().withSerializerModifier(new CustomBeanSerializerModifier()));
 
 
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,942評論 1 92
  • Getting Started Burp Suite 是用于攻擊web 應用程序的集成平臺。它包含了許多工具,并為...
    Eva_chenx閱讀 29,244評論 0 14
  • 會議開始了。 為了準備這次年底考核大會,辦公室?guī)讉€人加班加點沒日沒夜的忙了很久。本來年底事就多,一年下來,除了小小...
    水水的萱萱閱讀 396評論 0 2
  • 未來100天目標清單 1、即將來臨的國考對我來說很重要,在接下來的一個月,早上6::30之前洗漱完成,看一個小時申...
    小青水閱讀 332評論 0 2
  • 文/孤鳥差魚 每個夏天 都擁有 有始無終的遺憾
    孤鳥差魚閱讀 206評論 0 2

友情鏈接更多精彩內(nèi)容