您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Spring MVC中基于http请求标头启用json的动态漂亮打印?

如何在Spring MVC中基于http请求标头启用json的动态漂亮打印?

您可以定义一个新的 媒体类型 ,例如,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
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new PrettyPrintJsonConverter());
    }
}

如我所说,如果客户端发送带有application/pretty+jsonAccept标头的请求,我们PrettyPrintJsonConverter将编写JSON表示形式Prettily 。否则,MappingJackson2HttpMessageConverter将紧凑的JSON写入响应主体。

您可以使用 InterceptorResponseBodyAdvice或什至 Interceptors 达到相同的效果,但我认为,注册全新HttpMessageConverter方法更好。

Java 2022/1/1 18:14:00 有549人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶