Spring MVC + JSON = 406 Not Acceptable

我正在尝试生成一个简单的JSON响应。现在,我收到406不可接受的错误。Tomcat说:“此请求标识的资源只能根据请求“接受”标头生成特性不可接受的响应。” 即使我的Accept标题是

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

在tomcat / lib中,我有所有的Tomcat jar,Spring jar和jackson-all-1.9.0.jar。我在Tomcat 7中使用Spring 3.2.2。

我知道这个问题已经讨论了很多次,但是没有一种解决方案对我有用。

web.xml

<web-app id="WebApp_ID" version="2.4" 

xmlns="http://java.sun.com/xml/ns/j2ee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<display-name>Spring Web MVC Application</display-name>

<servlet>

<servlet-name>dispatcher</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.htm</url-pattern>

</servlet-mapping>

</web-app>

dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver" >

<property name="prefix">

<value>/WEB-INF/pages/</value>

</property>

<property name="suffix">

<value>.jsp</value>

</property>

</bean>

<context:component-scan base-package="com.smiechmateusz.controller" />

<context:annotation-config />

<mvc:annotation-driven />

</beans>

HelloWorldController.java

package com.smiechmateusz.controller;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

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.ModelAndView;

import org.springframework.web.servlet.mvc.AbstractController;

import com.smiechmateusz.dao.Foo;

@Controller

@RequestMapping("/")

public class HelloWorldController extends AbstractController{

@Override

protected ModelAndView handleRequestInternal(HttpServletRequest request,

HttpServletResponse response) throws Exception {

ModelAndView model = new ModelAndView("HelloWorldPage");

return model;

}

@RequestMapping(value="foobar.htm", method = RequestMethod.GET)

public @ResponseBody Foo getShopInJSON() {

Foo f = new Foo();

f.setX(1);

f.setY(2);

f.setDescription("desc");

return f;

}

}

Foo.java

package com.smiechmateusz.dao;

import java.io.Serializable;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.Id;

import javax.persistence.Table;

@Entity

@Table(name="foobaz")

public class Foo implements Serializable

{

private int x, y;

String description;

int id;

@Column(name = "x")

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

@Column(name = "y")

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

@Column(name = "description")

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

@Id @GeneratedValue

@Column(name = "id")

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

}

我已经尝试添加

<bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="messageConverters">

<list>

<ref bean="jsonConverter"/>

</list>

</property>

</bean>

到我的dispatcher-servlet.xml或将jakcson-all更改为jackson-asl和jackson-core-asl,但输出是相同的。

回答:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

那应该是问题。JSON用作application/json。如果相应地设置了Accept标头,则应该得到正确的响应。(有一些浏览器插件可让你设置标题,我最喜欢Firefox的“海报”)

以上是 Spring MVC + JSON = 406 Not Acceptable 的全部内容, 来源链接: utcz.com/qa/411646.html

回到顶部