我正在尝试使用Jersey创建一个非常简单的RESTful Web服务。我试图使它通过使用JAXB消耗并产生JSON。问题是,当我传递一个JSON给它时,我得到一个错误。使用JAXB解析Jersey中的JSON
以下是资源代码。 status()和echo()都可以正常工作。请注意,在processRequest()我目前正在生成一个文本响应,但稍后将更改生成一个JSON。
package web_service;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
@Path("/")
public class WebService {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String status() {
return "Web service is up and running.";
}
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
public String echo(String consumed) {
return consumed;
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public String processRequest(JAXBElement<Request> r) {
Request request = r.getValue();
return "Latitude: " + request.latitude +
"\n:Longitude: " + request.longitude;
}
}
这是请求模式:
package web_service;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Request {
public String latitude;
public String longitude;
public Request() {}
public Request(String latitude, String longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
// Getters and setters for both
}
我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5">
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>web_service</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
最后,这是我做的(头设置为POST的例子'Content-Type:application/json');
{
"latitude":"25.764084501106787",
"longitude":"-80.37422332275389"
}
当我运行此,Tomcat的给了我以下异常:
WARNING: WebApplicationException cause:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=class web_service.Request, genericType=class web_service.Request.
我也得到如下回应:
415 Unsupported Media Type
Content-Length: 1 kB
Content-Type: text/html;charset=utf-8
Date: 2013 Nov 4 17:41:20
Server: Apache-Coyote/1.1
我很新对此,这不是很有意义。希望你们中的一个能够帮我一把。谢谢!
我得到确切同样的错误。 – fpele
尝试使用我提供的配置。 – Vidya
不是。我将所有的Jackson jar,配置添加到web.xml,并将Request转换为POJO。我一直得到相同的错误:'找不到media_type = application/json的MessageBodyReader,type = class web_service.Request,genericType = class web_service.Request.'和'HTTP Status 415 - Unsupported Media Type' – fpele