我使用Spring 3.2.5创建RESTful Web服务。为了实现它,我使用了@ResponseBody
标记。当我使用InternalResourceViewResolver
并尝试加载Html响应时,它工作正常。但是当我调用标记为@ResponseBody
的URL时,它会将 HTTP 406 错误代码与错误文本一起提供
此请求标识的资源只能根据请求“accept”标题生成具有不可接受特征的响应。
我也在我的lib目录中包含了Jackson jar文件。
这是我的处理服务请求的控制器方法。
@ResponseBody
@RequestMapping (value = "/resp.htm")
public Data jsonResp() {
Data d = new Data();
d.setName("TEst");
d.setAddr("Address....");
return d;
}
有很多问题已被提及&回答,我尝试了很多,但它仍然给出了相同的结果。然后我遇到了一种新的答案,说明使用ContentNegotiatingViewResolver
。通过使用它,我能够以预期的格式查看响应。那是JSON格式。
使用ContentNegotiatingViewResolver
后,servlet调度程序代码如下所示:
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- JSON View -->
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
</bean>
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2" />
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
所以,我的问题是,每当我们需要使用Spring的Web服务功能时,我们是否必须要求ContentNegotiatingViewResolver
?
答案 0 :(得分:2)
答案 1 :(得分:1)
在从angular 8调用spring rest服务以上传文件时,我遇到了类似的问题。我正在使用ResponseEntity封装成功或失败消息,对此我有406个响应。我所做的只是在UI端this.httpClient.post(url,formData,{responseType:'text'}),并且我能够接受字符串作为服务响应的响应。
答案 2 :(得分:0)
与自定义类类型一起使用的注释@ResponseBody
通常使用MappingJackson2HttpMessageConverter
将对象转换为JSON并将其返回到application/json
内容中。
由于您的请求不包含Accept
的{{1}}标头,因此Spring将其创建的内容视为不可接受,而是返回406.
您只需更改添加application/json
标头的请求即可。 (您无法在浏览器中轻松完成此操作)。
答案 3 :(得分:0)
在我的情况下,请求有.html
后缀并收到此错误。一旦删除,它工作正常。
答案 4 :(得分:0)
您需要做的就是在类路径中添加jackson
个库找到它们Here