208 Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]
Spring Boot 中 HttpMediaTypeNotAcceptableException
的解决方案
当遇到 HttpMediaTypeNotAcceptableException: Could not find acceptable representation
错误时,通常意味着客户端请求的内容类型与服务器能够处理或响应的内容类型不匹配。以下是几种常见的解决方法:
1. 检查控制器中的 produces
属性配置
如果在控制器的方法上使用了 @RequestMapping
或其变体(如 @GetMapping
, @PostMapping
),并指定了 produces
参数,则需要确保此参数设置正确。
@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
// 处理文件上传逻辑...
}
上述代码中指定的媒体类型应能被客户端接受。如果不希望限定特定的内容类型,可以移除 produces
参数[^4]。
2. 验证实体类结构及其访问器方法
对于返回给前端的数据对象,需确认已为其提供了公共的 getter 和 setter 方法以便序列化工具正常工作。例如,在自定义的结果封装类 R 中如果没有这些方法可能会引发异常。
public class R<T> {
private int code;
private String msg;
private T data;
public R() {}
// Getter and Setter methods must be present here.
public void setCode(int code){
this.code=code;
}
public int getCode(){
return this.code;
}
...
}
缺少必要的存取函数可能导致 Jackson 序列化失败从而抛出错误消息[^5]。
3. 调整 Accept 请求头
有时问题也可能源于 HTTP 请求本身携带了不当的 Accept Header 值。可以通过修改浏览器端发送请求的方式或者调整 API 客户端来修正这个问题。比如通过 Postman 测试 RESTful 接口时可手动设定合适的 Accept 字段值为 "*/*"
或者具体的应用程序所需 MIME 类型。
4. 添加额外的消息转换器
为了支持更多种类的数据格式解析,可以在应用程序上下文中注册更多的 HttpMessageConverter 实现。这允许框架更好地理解和回应来自不同源的不同类型的输入/输出数据流。
<!-- application.properties -->
spring.http.converters.preferred-json-mapper=jackson
或是编程方式添加到 WebMvcConfigurerAdapter 子类里:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
jacksonConverter.setObjectMapper(objectMapper);
converters.add(jacksonConverter);
}
}
以上措施有助于提高系统的兼容性和灵活性,减少因内容协商机制引起的冲突情况发生。
相关推荐
















