chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确

问题描述

chrome游览器又一款JSON插件叫JSON Formatter,游览器GET请求调用接口时,如果返回的数据是json格式,则会自动格式化展示,类似这样:

但是今天突然发现怎么也格式化不了,打开一个json文件倒是可以格式化,但是请求接口返回json就是无法格式化

问题原因

反复卸载重装插件都没有解决,所以想到会不是接口返回的数据有问题,排查发现接口返回的Response Headers中content-type是 text/html,这就不对劲了,按理说springboot项目Controller只要用了@RestController注解,返回实体对象的话,content-type应该默认就是application/json才对,这里居然不对

解决方案

既然返回的Content-Type不对,这里最简单的方案

复制代码
@GetMapping(value = "/pageQuery/{apiPostfix}", produces = "application/json;charset=UTF-8")

@GetMapping注解里加上produces属性配置为指定的,实测确实可以解决

但是springboot项目Controller只要用了@RestController注解,返回实体对象的话,content-type应该默认就是application/json才对,这里一定是哪里出了问题才会有变化,经过排查发现在公司的依赖库里找到这么个类

其中46行添加了一个FastJson的消息转换器,而且没有设置setSupportedMediaType属性,这里默认指是*/*,导致了后续返回数据时出了问题。

这里要注意在添加FastJsonHttpMessageConverter时要设置SupportedMediaTypes

复制代码
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON_UTF8));

或者干脆不要用FastJsonHttpMessageConverter了,一般MappingJackson2HttpMessageConverter已经完全够用了,引入这么个消息转换器不知道哪天又出什么BUG

相关推荐
Dicky-_-zhang几秒前
Java并发编程实战:线程池与并发工具类
java·jvm
devilnumber1 分钟前
JDK6→JDK7→JDK8 重点技术更新(精简背诵版)
java
云烟成雨TD2 分钟前
Spring AI Alibaba 1.x 系列【61】Graph 持久化执行
java·人工智能·spring
muqsen2 分钟前
Java 分布式相关面试题总结
java·开发语言·分布式
放下华子我只抽RuiKe53 分钟前
React 从入门到生产(六):路由与导航
前端·人工智能·深度学习·react.js·前端框架·html·claude code
Sylus_sui3 分钟前
实现:每行固定 5 个、自动换行、最后一行左对齐、数量不固定
前端·javascript·css
做个文艺程序员5 分钟前
第02篇:搭建 ES 集群 + Spring Boot 整合实战——从 Docker Compose 到 Java 客户端全覆盖
java·spring boot·elasticsearch
Jinkxs6 分钟前
LoadBalancer- 简单限流策略:Nginx 基于连接 / 请求的限流实现
java·运维·nginx
文滨13 分钟前
10分钟搞定!Mac 配置 GitHub SSH 完全指南(小白也能看懂)
前端·macos·ssh·github
fenglllle13 分钟前
JDK8升级JDK17使用CompletableFuture在线程中classloader的变化
java·开发语言·jvm