2012-07-03 94 views
2

我找了很多关于这个问题的问题,但我并没有解决...... 我有这样的方法:春JSON和406 HTTP错误

@RequestMapping(value="/testInit") 
public @ResponseBody Output test() throws Exception { 
    return new Output(true); 
} 

,我不得不杰克逊libreary到类路径,进入的applicationContext但我仍然得到406错误与这个jQuery调用:当客户端请求,服务器不能返回的内容类型

$.ajax({ 
    url: "/testInit", 
    type: "get", 
    dataType: "json" 
}); 

回答

0

我解决了使用jackson-all.1.9.0.jar而不是jackson 2库。

0

406 Not Acceptable响应时使用。换句话说,您的客户端(例如Web浏览器)正在发送与服务器功能不匹配的Accept标头。

我猜jQuery Ajax方法在设置Accept标头时使用dataType字段。 json不是一个知名的内容类型 - 但是application/json是。

尝试用dataType: "application/json"替换dataType: "json"

+0

这是与萤火虫的标题捕获:接受应用程序/ json,文本/ JavaScript,*/*; Q = 0.01 – Tobia

0

我可以让我的工作的唯一方法是升级到3.1,并添加一个产品到请求映射。

@RequestMapping(value = "/rest/{myVar}", method = RequestMethod.GET, produces = "application/json") 
@ResponseBody 
public MyObject get(
     @PathVariable String myVar) { 

无其他解决方案的工作对我来说

4

您必须添加的罐子,并添加org.springframework.http.converter.json.MappingJacksonHttpMessageConverterorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter到DispatcherServlet的-servlet.xml中

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jacksonMessageConverter"/> 
     </list> 
    </property> 
</bean> 
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> 

如上所示。

0

我有这个问题,最终追查到没有任何getters在我正在使用的类。

即这造成了406

public static class Pojo { 
    private int x; 
    public Pojo(int x) { 
     this.x = x; 
    } 
} 

但这并没有

public static class Pojo { 
    private int x; 
    public Pojo(int x) { 
     this.x = x; 
    } 
    public int getX() { 
     return x; 
    } 
} 

是的,我是用一种称为POJO的:)类 - 我只是做一个虚拟的例子来检查杰克逊在我的新设置中工作