1. 程式人生 > >使用ResponseBodyAdvice對@ResponseBody響應體加密結果去掉雙引號/新增響應頭

使用ResponseBodyAdvice對@ResponseBody響應體加密結果去掉雙引號/新增響應頭

此篇文章寫給自己作為記錄。如有看不懂的,請留言。

需求:

     大多數時候,我們後臺返回給前端的資料都是會做加密處理,同時並設定響應頭,也可能對往響應頭中新增資料。在SpringMVC中我們通常採用Restful 風格進行開發,使用@ResponseBody返回 Json 資料。

       採用註解式。

開發:

spring5之前繼承WebMvcConfigurerAdapter 

spring5之後實現WebMvcConfigurer

我這裡使用的是SpringBoot 2.0.4,所以是spring5

@Configuration
public class HttpConverterConfig implements WebMvcConfigurer {

    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
        return new MappingJackson2HttpMessageConverter(){
            @Override
            protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
                if(object instanceof String){
                    Charset charset = this.getDefaultCharset();
                    StreamUtils.copy((String)object, charset, outputMessage.getBody());
                }else{
                    super.writeInternal(object, type, outputMessage);
                }
            }
        };
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = mappingJackson2HttpMessageConverter();
        converter.setSupportedMediaTypes(new LinkedList<MediaType>(){{
            add(MediaType.TEXT_HTML);
            add(MediaType.APPLICATION_JSON_UTF8);
        }});
        converters.add(new StringHttpMessageConverter());
        converters.add(converter);
    }
}