我一直在使用系统服务器端的jackson开发一个Web服务,并使用jersey访问它,这对于get请求工作正常但是当我尝试将POJO发布到Web时,我遇到了一堵砖墙服务,因为它一直返回415错误。
解析POST请求的服务器端代码:
public View addFarmer(@RequestBody Farmer farmer) {
farmerService.saveFarmer(farmer);
return new RedirectView("/farmerView/"+ farmer.getFarmerId());
}
处理与服务通信的客户端类:
public Status addFarmer(Farmer farmer) throws UniformInterfaceException, IOException {
ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, farmer);
return response.getClientResponseStatus();
}
客户端POJO被发送到服务器:
@XmlRootElement(name="Farmer")
public class Farmer implements Serializable {
private Integer farmerId;
private String farmerName;
public Farmer() { }
public Farmer(Integer farmerId) {
this.farmerId = farmerId;
}
public Integer getFarmerId() { return farmerId; }
public void setFarmerId(Integer farmerId) { this.farmerId = farmerId; }
public String getFarmerName() { return farmerName; }
public void setFarmerName(String farmerName) { this.farmerName = farmerName; }
}
客户端测试用例:
public void testAddFarmer() throws Exception {
System.out.println("addFarmer");
FarmerRestClient instance = new FarmerRestClient();
Farmer farmer = new Farmer() ;
farmer.setFarmerId(4);
farmer.setFarmerName("farmer4");
Status result = instance.addFarmer(farmer);
assertEquals("200", result);
System.out.println(result);
}
在服务器端使用POJO测试保存功能正常工作,所以我在尝试保存POJO时,我正在尝试将其简单化,但是将POJO发布到休息客户端的研究似乎很短在例子上。我对杰克逊和泽西岛来说比较新。
非常感谢任何协助,
李亚男
我已将配置xml文件更新为如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<mvc:annotation-driven />
<beans:bean id="farmerView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<beans:bean id="advisorView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<beans:bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></beans:bean>
<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:ref bean="jacksonMessageConverter" />
</beans:list>
</beans:property>
</beans:bean>
<beans:bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<beans:property name="mediaTypes">
<beans:map>
<beans:entry key="json" value="application/json" />
</beans:map>
</beans:property>
<beans:property name="viewResolvers">
<beans:list>
<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
</beans:list>
</beans:property>
</beans:bean>
<resources mapping="/resources/**" location="/resources/" />
<beans:import resource="controllers.xml" />
</beans:beans>
我的服务器端代码处理请求以获得接受标头,如下所示:
@RequestMapping(headers="Accept=application/json", method = RequestMethod.POST)
public View addFarmer(@RequestBody Farmer farmer) {
farmerService.saveFarmer(farmer);
return new RedirectView("/farmerView/"+ farmer.getFarmerId());
}
客户端代码没有将JSON发送到服务器,所以我更新了它以确保它是:
public Status addFarmer(Farmer farmer) throws UniformInterfaceException, IOException {
String json = mapper.writeValueAsString(farmer);
ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, json);
return response.getClientResponseStatus();
}
但是我仍然遇到同样的错误。我确信这是由于我对Spring MVC和jackson缺乏经验。我抱歉没有提到我在原帖中使用Spring
答案 0 :(得分:0)
mvc-showcase具有基于REST的服务的良好示例。
由于您正在派遣农民(作为xml)并期望回到已保存的农民,您应该从控制器返回农民并使用@ResponseBody注释您的控制器方法
public @ResponseBody Farmer addFarmer(@RequestBody Farmer farmer) {
Farmer savedFarmer = farmerService.saveFarmer(farmer);
return savedFarmer;
}
客户端请求应具有application / xml或application / json的Accept标头(视情况而定),并且您的请求应该通过。
答案 1 :(得分:0)
看起来你在服务器上使用Spring。如果你没有an HTTP message converter能够处理JSON内容,我希望415是你得到的错误。