Spring Boot: HttpMediaTypeNotAcceptableException: Could not find acceptable representation原因及解决方法

原创 2016年06月01日 18:05:13

错误场景

使用Spring Boot的Web项目,在其 resources/static/目录下存在login.html静态文件,同时还有一个处理/login请求的控制器方法(该方法会返回JSON格式的数据)。此时如果访问localhost:8080/login.html,用户期望返回login.html页面,但框架却报错:

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
    at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:235) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:382) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:322) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:60) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]
    at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:351) ~[spring-webmvc-4.2.4.RELEASE.jar:4.2.4.RELEASE]

错误原因

Spring Boot的MVC默认配置中使用的 ViewResolver 为 ContentNegotiatingViewResolver,该视图解析器的功能是根据要请求的文档类型,来查找不同的视图以返回对应格式的文档。请求的文档类型要可以从请求头中的Accept中获取,也可以通过URI后缀名得到,如/login.html即为请求HTML格式的文档,这两种方式分别对应着两种不同的Strategy(策略),默认为根据URI后缀名。Spring Framework Reference 17.5 节 ContentNegotiatingViewResolver中有说明:

The ContentNegotiatingViewResolver does not resolve views itself but rather delegates to other view resolvers, selecting the view that resembles the representation requested by the client. Two strategies exist for a client to request a representation from the server:
• Use a distinct URI for each resource, typically by using a different file extension in the URI. For example, the URI http://www.example.com/users/fred.pdf requests a PDF representation of the user fred, and http://www.example.com/users/fred.xml requests an XML representation.
• Use the same URI for the client to locate the resource, but set the Accept HTTP request header to list the media types that it understands. For example, an HTTP request for http:// www.example.com/users/fred with an Accept header set to application/pdf requests a PDF representation of the user fred, while http://www.example.com/users/fred with an Accept header set to text/xml requests an XML representation. This strategy is known as content negotiation.

因此,当用户请求 /login.html 时,spring会查找/login对应的控制器,并得到其返回的文档类型为application/json, 然后判断它与后缀名.html文档类型是否匹配,如果不匹配,就报HttpMediaTypeNotAcceptableException了。
其实它的初衷是好的,它是想实现访问/user.json时返回JSON数据,访问/user.html返回HTML, 访问/user.xml则返回XML的功能。但是在这里我们只用Spring Boot提供RESTful接口,因此该功能就无用武之地了。

解决方案

  • 防止静态文件名跟控制器请求路由冲突。如本例中,将login.html更名为signin.html
  • 将静态文件URI与动态请求URI分离。如,把提供REST接口的URI都改成以/api/XXX开头,把静态文件改为以/static/XXX开头。这样当请求/static/login.html时,spring会直接使用内置的处理静态资源的控制器返回静态文件而不再去查找用户定义的控制器、
版权声明:本文为博主原创文章,转载请注明出处和原作者。

Springmvc 406 状态码 / Could not find acceptable representation

查阅资料,大都表示需要 加入依赖的jar,jackson-core-asl-1.9.12.jar,jackson-mapper-asl-1.9.12.jar问题解决。 经测试不是这个错误不是必须依赖这...
  • u011278496
  • u011278496
  • 2015年04月05日 01:33
  • 4378

Could not find acceptable representation

做项目的时候搭建环境出现下列异常;找了1个小时;贴出来分享一下 springmvc 和mybatis整合: Could not find acceptable representation: ...
  • tang_hai_bin
  • tang_hai_bin
  • 2015年08月14日 11:20
  • 725

SpringMVC异常报406 (Not Acceptable)的解决办法

使用SpsringMVC,使用restEasy调试,controller请求设置如下:  Java代码   @RequestMapping(value="/list",me...
  • shehun11
  • shehun11
  • 2015年01月04日 14:28
  • 6430

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representatio

Exception:org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable rep...
  • a1124544556
  • a1124544556
  • 2017年04月26日 14:46
  • 472

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representatio

@RequestMapping(value = "/enumType/importData",method = RequestMethod.POST, produces = "text/html;c...
  • cjc921
  • cjc921
  • 2015年02月26日 16:40
  • 15369

org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representatio

http://www.cnblogs.com/byshome/archive/2013/03/21/2973405.html org.springframework.web.HttpMedi...
  • snakeMoving
  • snakeMoving
  • 2017年05月04日 20:26
  • 799

SpringMVC HandlerMethodReturnValueHandler解读

HandlerMethodReturnValueHandler:对方法返回值进行处理的策略接口 /** * 策略模式接口:处理 Controller 方法返回值 */ public interfa...
  • lgh1992314
  • lgh1992314
  • 2017年09月09日 09:45
  • 878

HttpMediaTypeNotSupportedException

用spring boot , ajaxSubmit做文件上传时报下面微信客户端console报的错误: ①"Unsupported Media Type" ②WebKitFormBoundaryq...
  • zhaoyingjiao
  • zhaoyingjiao
  • 2016年11月24日 10:22
  • 2152

spring配置错误Could not find acceptable representation

pring 报错,Could not find acceptable representation 使用spring mvc框架我们可以可以使用@ResponseBody注解,相应ajax请求并返回...
  • li951383937
  • li951383937
  • 2016年06月16日 15:03
  • 1045

关于Spring3 MVC的 HttpMediaTypeNotSupportedException

使用框架:Spring3 MVC + dojo1.8 前提:配置Spring MVC以JSON数据形式响应请求 使用场景:dojo向Spring MVC发送ajax请求 异常信息:org...
  • limingjian
  • limingjian
  • 2013年02月01日 16:35
  • 26747
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring Boot: HttpMediaTypeNotAcceptableException: Could not find acceptable representation原因及解决方法
举报原因:
原因补充:

(最多只允许输入30个字)