无情的406错误

时间:2017-05-07 18:19:20

标签: java spring-mvc

我花了很多时间尝试从spring MVC控制器返回一个JSON对象。我检查了406个错误帖子。它可以没有问题地返回简单的字符串(即,如果我将控制器方法更改为String并返回“hello”)。但是,当我返回一个对象时,希望使用JSON呈现它,并检查浏览器,并提供HTTP状态[406] - [不可接受]。我尝试了我的AngularJS应用程序,它做了同样的事情,所以我怀疑这是一个标题问题。

我试过了:

  • 更新库
  • 添加@EnableWebMvc
  • 添加headers =“Accept = / ”或其他标题
  • 尝试不同的过滤器,不同的浏览器,发送各种标头 (尝试了Accept = / 和application / json

我试图尽可能多地包含数据:

http://localhost:8080/ImageQuiz/test.me

Java 8 雄猫9 Eclipse霓虹灯 春季4.3

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>4.3.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.8.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.5.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.5.3</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>

我的控制器:

import org.imagequiz.web.mvccontrollers.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Controller
@EnableWebMvc
public class HelloWorldRestController {

@Autowired
UserService userService; 

@RequestMapping(value = "/test.me", headers="Accept=*/*", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody Car list() {
        return new Car();

}

public class Car {
    private String windows = "clear";
    private String color = "red";
    public String getWindows() { return windows; }
    public String getColor() { return color; }
}

我的applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       ......">

   	<context:component-scan base-package="org.imagequiz.web.mvccontrollers" />
	
	

  <!-- The singleton hibernate session factory -->
  <bean id="sessionFactory" scope="singleton"
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="configLocation" value="classpath:hibernate.cfg.xml" />
  </bean>

  <!-- Spring's hibernate transaction manager, in charge of making hibernate sessions/txns -->
  <bean id="transactionManager"
    class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
  </bean>

  <!-- So classes/functions with @Transactional get a hibernate txn -->
  <tx:annotation-driven />
  
  <!-- The singleton business services class, to be given to the actions -->
  <bean id="IQDataSource" class="org.imagequiz.dao.IQDataSource" scope="singleton">
    <property name="sessionFactory" ref="sessionFactory" />
  </bean>

我的web.xml

       <?xml version="1.0" encoding="UTF-8"?>
   <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <welcome-file-list>
    <welcome-file/>
	</welcome-file-list>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
   <filter> <!-- Get spring to keep the session open for the whole request, so hibernate's lazy loads work -->
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
    <init-param>
         <param-name>sessionFactoryBeanName</param-name>
         <param-value>sessionFactory</param-value> 
     </init-param>
  </filter>
  <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
        	<param-name>contextConfigLocation</param-name>
        	<param-value>/WEB-INF/applicationContext.xml</param-value>
    	</init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    
    
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    	<servlet-name>dispatcher</servlet-name>
    	<url-pattern>*.me</url-pattern>
    </servlet-mapping>
    
    
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
    <listener>
	<listener-class>org.imagequiz.Startup</listener-class>
    </listener>
    

   <filter>
      <filter-name>SecurityFilter</filter-name>
      <filter-class>org.imagequiz.web.SecurityFilter</filter-class>
   </filter>
   <filter-mapping>
      <filter-name>SecurityFilter</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
 
    <resource-ref>
        <res-ref-name>imagequiz</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref> 
   </web-app>

接头:

    General
    Request URL:http://localhost:8080/ImageQuiz/test.me
    Request Method:GET
    Status Code:406 
    Remote Address:[::1]:8080
    Referrer Policy:no-referrer-when-downgrade
    Response Headers
    view source
    Content-Language:en
    Content-Length:1186
    Content-Type:text/html;charset=utf-8
    Date:Sun, 07 May 2017 18:02:54 GMT
    Request Headers
    view source
  
  
  
 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Encoding:gzip, deflate, sdch, br
    Accept-Language:en-US,en;q=0.8
    Cache-Control:no-cache
    Connection:keep-alive
    Cookie:JSESSIONID=423C1FFC5D7A93CEAC3142453FDB6002
    Host:localhost:8080
    Pragma:no-cache
    Upgrade-Insecure-Requests:1
    User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 
    (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36

0 个答案:

没有答案