RestTemplate发送POST请求提示无MyRequest类的HttpMessageConverter如何解决
Spring RestTemplate 发送POST请求 No HttpMessageConverter 问题解决方案
排查&解决步骤
检查自定义请求类
MyRequest的序列化支持
Jackson序列化自定义对象需要类包含无参构造方法,以及所有序列化字段对应的getter/setter方法,推荐使用Lombok注解简化配置:import lombok.Data; import lombok.NoArgsConstructor; @Data // 自动生成getter、setter、toString等方法 @NoArgsConstructor // 自动生成无参构造方法 public class MyRequest { // 自定义字段示例 private String param1; private Integer param2; }不使用Lombok请手动添加对应方法即可。
确认RestTemplate配置全局生效
不要在业务代码中临时修改RestTemplate的消息转换器,需通过配置类生成全局RestTemplate实例交给Spring容器管理:import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.Collections; import java.util.List; @Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> converters = new ArrayList<>(); MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(); jacksonConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.ALL)); converters.add(jacksonConverter); // 保留默认的其他消息转换器,避免其他类型请求报错 converters.addAll(restTemplate.getMessageConverters()); restTemplate.setMessageConverters(converters); return restTemplate; } }调用时手动指定请求格式
发送请求时用HttpEntity包装请求参数,显式指定Content-Type为JSON格式,确保Jackson转换器匹配到请求类型:@Autowired private RestTemplate restTemplate; public void postToAPI(MyRequest request){ HttpHeaders headers = new HttpHeaders(); // 显式指定请求格式为JSON headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<MyRequest> requestEntity = new HttpEntity<>(request, headers); EventResponse response = restTemplate.postForObject(PUSH_URL, requestEntity, EventResponse.class); }检查Jackson依赖是否完整
普通Spring项目(非Spring Boot)需要手动引入Jackson序列化依赖,Maven配置示例:<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 替换为和Spring版本匹配的版本号 --> </dependency>
内容的提问来源于stack exchange,提问作者Marcin_S
相关产品推荐
相关产品推荐

