Jersey를 사용하여 매우 간단한 RESTful 웹 서비스를 만들려고합니다. 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
Nope. 모든 잭슨 병을 web.xml에 추가하고 Request를 POJO로 바꿨습니다. 계속해서 동일한 오류가 발생합니다. '미디어 유형 = application/json, type = class web_service.Request, genericType = class web_service.Request.' 및'HTTP 상태 415 - 지원되지 않는 미디어 유형 '에 대해 MessageBodyReader를 찾을 수 없습니다. – fpele