您可以定义一个新的 媒体类型
,例如,
application/pretty+json并注册一个
HttpMessageConverter可以转换为该媒体类型的新媒体类型。实际上,如果客户端发送带有
Accept:application/pretty+json标头的请求,我们的新用户
HttpMessageConverter将编写响应,否则,旧用户
MappingJackson2HttpMessageConverter将执行响应。
因此,扩展
MappingJackson2HttpMessageConverter如下所示:
public class PrettyPrintJsonConverter extends MappingJackson2HttpMessageConverter { public PrettyPrintJsonConverter() { setPrettyPrint(true); } @Override public List<MediaType> getSupportedMediaTypes() { return Collections.singletonList(new MediaType("application", "pretty+json")); } @Override public boolean canWrite(Class<?> clazz, MediaType mediaType) { boolean canWrite = super.canWrite(clazz, mediaType); boolean canWritePrettily = mediaType != null && mediaType.getSubtype().equals("pretty+json"); return canWrite && canWritePrettily; }}
setPrettyPrint(true)构造函数中的那个将为我们解决问题。然后,我们应该注册
HttpMessageConverter:
@EnableWebMvc@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new PrettyPrintJsonConverter()); }}
如我所说,如果客户端发送带有
application/pretty+jsonAccept标头的请求,我们
PrettyPrintJsonConverter将编写JSON表示形式
Prettily 。否则,
MappingJackson2HttpMessageConverter将紧凑的JSON写入响应主体。
您可以使用 Interceptor
ResponseBodyAdvice或什至 Interceptors
达到相同的效果,但我认为,注册全新
HttpMessageConverter的方法更好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)