我尝试使用以下格式通过RESTtemplate发出put请求。
@Autowired
RestTemplate template;
@RequestMapping(value = "/change", method = RequestMethod.PUT)
public ModelAndView change(Data data){
List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
acceptableMediaTypes.add(MediaType.APPLICATION_XML);
HttpHeaders headers = new HttpHeaders();
headers.setAccept(acceptableMediaTypes);
HttpEntity<Data> entity = new HttpEntity<Data>(data, headers);
String url="http://www...com";
try {
template.put(url, entity);
} catch (Exception e) {
System.out.println(e);
}
return new ModelAndView("redirect:/home");
}
我检查了数据库,我意识到没有变化。甚至请求也没有写在日志文件中。当我调试时,我没有收到任何错误。可能我没有正确使用put方法。任何人都可以建议我应该如何使用put方法或者我应该尝试使用RestTemplate执行put请求?
此外,我尝试使用交换方法而不是put:
try {
ResponseEntity<Data> result = template.exchange(Url, HttpMethod.PUT, entity, Data.class);
} catch (Exception e) {
System.out.println(e);
}
但在这种情况下,我采取了以下例外:
org.springframework.web.client.RestClientException:无法提取响应:没有为响应类型[website.Data]和内容类型[text / html; charset = utf-8]找到合适的HttpMessageConverter。
从标题中可以看出,我将内容类型设置为application / xml而不是text / html。我看看标题,我可以看到包含:
Accept: application/xml
我真的无法理解。我还应该改变什么?有关异常的任何评论吗?
配置:
<bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"
p:basename="config/views" p:order="1" />
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="location">
<value>/WEB-INF/classes/config/xml-views.xml</value>
</property>
<property name="order" value="0" />
</bean>
<!--It is used for redirect-->
<bean id="urlBasedViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value=""/>
<property name="suffix" value=""/>
<property name="order" value="2" />
</bean>
<context:annotation-config />
<!--<context:annotation-config />-->
<context:component-scan base-package="data.controller" />
<context:component-scan base-package="data.service" />
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter"/>
</list>
</property>
</bean>
答案 0 :(得分:3)
我猜你的应用程序的客户端是一个网页(然后是HTML)。 This article解释了如何使您的webapp为未来的浏览器兼容性做好准备(如果他们后来决定支持例如PUT,DELETE操作)。
总结我们的项目,我们刚刚在web.xml中声明了这些行:
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/app/*</url-pattern>
</filter-mapping>
文章谈到要添加的javascript(可能是Spring 3.0 M1之前的版本),但我们发现这个解决方案更好,因为它只是一个配置。