You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:15:03