spring boot 自定義訊息轉換器
阿新 • • 發佈:2018-11-30
需求分析:在請求返回中,想統一返回的資料格式。在controller層中通過aop中的環繞通知實現了這個功能。但是在轉換的過程中,提示沒有自定義的格式轉換器。所有我們需要自己實現這個轉換器。
實現方式:通過繼承 AbstractHttpMessageConverter這個類來實現功能。
public class ResultBeanConverter extends AbstractHttpMessageConverter<ResultBean> { private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private static final String DEFAULT_SUBTYPE = "json"; public ResultBeanConverter(){ super(new MediaType("application", DEFAULT_SUBTYPE, DEFAULT_CHARSET)); } @Override protected boolean supports(Class<?> aClass) { return ResultBean.class.isAssignableFrom(aClass); } @Override protected ResultBean readInternal(Class<? extends ResultBean> aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException { return new ResultBean(); } @Override protected void writeInternal(ResultBean resultBean, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException { StreamUtils.copy(resultBean.toString(), DEFAULT_CHARSET, httpOutputMessage.getBody()); } }
通過spring注入,解決問題。
@Configuration public class WebMvcConfig extends WebMvcConfigurationSupport { @Override protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(resultBeanConverter()); super.extendMessageConverters(converters); } @Bean public ResultBeanConverter resultBeanConverter(){ return new ResultBeanConverter(); } }