RestTemplate报错‘application/json不受支持’问题排查求助
排查"Content type 'application/json' not supported"错误的几个关键点
我之前也碰到过一模一样的问题,大多是一些容易忽略的配置或代码细节导致的,给你梳理几个排查方向:
服务端RestController检查
- 确认方法参数加了
@RequestBody注解
这是最常见的原因!如果你的Controller方法接收POJO但没加@RequestBody,Spring不知道要把请求体的JSON转换成对象,就会抛出这个错误。正确写法应该是:@PostMapping("/your-endpoint") public String handleRequest(@RequestBody YourPojo pojo) { // 业务逻辑 return "success"; } - 检查
@PostMapping的consumes属性
确保接口明确声明支持application/json类型的请求体,比如:
如果没指定@PostMapping(value = "/your-endpoint", consumes = MediaType.APPLICATION_JSON_VALUE)consumes,虽然Spring默认可能支持,但某些场景下(比如配置了其他消息转换器优先级更高)会出问题。
客户端RestTemplate配置检查
- 确认RestTemplate包含
MappingJackson2HttpMessageConverter
虽然你加了jackson-databind依赖,但如果是自定义的RestTemplate实例,可能没有自动注册这个转换器。可以手动添加:RestTemplate restTemplate = new RestTemplate(); // 确保添加Jackson转换器(如果没有的话) boolean hasJacksonConverter = restTemplate.getMessageConverters().stream() .anyMatch(c -> c instanceof MappingJackson2HttpMessageConverter); if (!hasJacksonConverter) { restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); } - 请求时正确设置Content-Type头
发送请求时必须显式设置请求头的Content-Type为application/json,否则RestTemplate可能默认发送其他类型(比如application/x-www-form-urlencoded),导致服务端不识别:HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<YourPojo> requestEntity = new HttpEntity<>(yourPojoObject, headers); String response = restTemplate.postForObject("http://your-server/your-endpoint", requestEntity, String.class);
POJO类本身的检查
- 确保POJO有无参构造函数
Jackson默认需要无参构造来实例化对象,如果你的POJO只有带参构造,没有无参的,会导致服务端无法解析JSON请求体,间接引发这个错误。 - 检查字段的getter/setter是否齐全
Jackson依赖getter/setter来访问和设置字段值,如果某个字段缺少对应的方法,可能会导致解析失败,进而触发content type不支持的错误。
其他潜在问题
- 检查Jackson与Spring版本兼容性
如果Jackson版本和Spring版本差距过大,可能会出现兼容性问题。可以查看pom.xml中Spring自带的Jackson版本,确保你引入的jackson-databind版本和它一致(或者用Spring的依赖管理统一版本)。 - 检查服务端是否禁用了JSON消息转换器
如果你的项目中有自定义的WebMvcConfigurer,检查是否在configureMessageConverters方法中移除了MappingJackson2HttpMessageConverter,如果是,需要重新添加回去。
内容的提问来源于stack exchange,提问作者bforcer
相关产品推荐
相关产品推荐

