错误信息摘要

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
	at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:216)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:376)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:316)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:62)
	at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:350)
	at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1188)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:964)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
......

产生异常的原因

出现这个异常主要是客户端请求期望响应的媒体类型与服务器响应的媒体类型不一致造成的。例如客户端希望返回的媒体类型是json对象(application/json),服务器返回的媒体类型是一个普通的json字符串(text/plain);又或者是客户端希望返回的是html页面,服务器返回的却是json对象。

客户端(或前端)的请求头指定了期望响应的媒体类型是 json 类型

Accept: application/json

服务器端响应的媒体类型是一个 json 字符串,实际上也就是一个普通的字符串

@RequestMapping(value="test",produces="text/plain")
public String test(){
	User user = new User();
	String json = user.toJson();
	return json;
}

解决方法

客户端(前端)的解决

在请求头添加多种媒体类型,用逗号分割

Accept: application/json, text/plain

又或者直接用*号匹配所有类型

Accept: */*
服务端(后端)的解决

方式一:删掉produces属性: @RequestMapping(value=“test”,produces=“text/plain”)
方式二:修改produces为Accept期望的类型@RequestMapping(value=“test”,produces=“application/json”)

改动到了produces有一点需要注意的,这可能会影响到返回值的被别的HttpMessageConverter给处理了,最终会影响到返回内容。那么就要找到对应的HttpMessageConverter添加对应的媒体类型的处理。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐