如何在Spring MVC中解析HTTP状态406

时间:2019-02-07 15:00:21

标签: spring spring-boot spring-mvc spring-security

我是初学者,正尝试使用Spring MVC创建REST api,但出现HTTP 406错误。我不知道代码出了什么问题。这是我的控制器。

RestController.Java

 package com.nitish.sample;
    @RestController
    public class LoginRESTController {

    @Autowired
    public LoginService loginService;

    @ResponseBody
    @RequestMapping(value = "/api/login",method = RequestMethod.GET,headers="Accept=*/*",produces = {MediaType.APPLICATION_JSON_VALUE}) 
    public List<Login> authentication(){        
        List<Login> login = loginService.getUser();     
        return login;
    }}

pom.xml

<dependencies>
<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.9.8</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.9.8</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-core-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
</dependencies>

为进一步说明,我添加了Dispachet Servlet和web.xml HelloWebSpring-servlet.xml

 <beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package = "com.nitish.sample" />   

   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>


</beans>

web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>HelloWebSpring</display-name>

  <servlet>
      <servlet-name>HelloWebSpring</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>HelloWebSpring</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>  

</web-app>

这是服务器快照

API request

3 个答案:

答案 0 :(得分:0)

首先,您应该尝试将其包装到ResponseEntity中。我会这样:

@RequestMapping(value = "/api/login",method = RequestMethod.GET) 
public ResponseEntity<?> authentication(){        
    List<Login> login = loginService.getUser();     
    return new ResponseEntity<>(login, HttpStatus.OK);
}}

我认为这应该有效。

答案 1 :(得分:0)

以下是我可以尝试的解决方案:

  1. 在使用@RestController时,它在内部提供@ResponseBody,因此您不必使用它,因此请删除@ResponseBody注释。

  2. 尝试删除accept并产生属性,因为rest控制器的内容类型是JSON本身。

  3. 此外,如果您使用邮递员或任何其他客户端发出请求,请确保在标头中添加内容类型。

希望它会有所帮助..!

答案 2 :(得分:0)

  1. 删除标头=“ Accept = / ”。
  2. 在您的HelloWebSpring-Servlet.xml中添加 mvc:annotation-driven

这将使spring配置您的@RestController。

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:mvc="http://www.springframework.org/schema/mvc"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <mvc:annotation-driven /> 
   <context:component-scan base-package = "com.nitish.sample" />   

   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>


</beans>

mvc:注释驱动的详细信息:https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-config