2012-05-25 3 views
0

Jersey (1.12)를 사용하여 REST 서비스를 통해 POJO를 노출하고자하는 부두 서버 (8.1.3)가 있습니다. 리소스를 JSON에 매핑하는 데 문제가 있으며 그 이유를 파악할 수 없습니다.Jetty에서 Jersey를 사용하여 JSON에 매핑

부두와 뉴저지 서블릿 시작 :

public class JettyUtil { 
    public static void start() throws Exception { 
    Server server = new Server(); 
    SelectChannelConnector connector = new SelectChannelConnector(); 
    connector.setPort(8999); 
    server.addConnector(connector); 

    HandlerList handlers = new HandlerList(); 
    handlers.setHandlers(new Handler[] { createJerseyServlet(), new DefaultHandler() }); 
    server.setHandler(handlers); 

    server.start(); 
    server.join(); 
    } 

    private static Handler createJerseyServlet() { 
    ServletContextHandler handler = new ServletContextHandler(); 
    handler.setContextPath("/game"); 
    SessionHandler sessionHandler = new SessionHandler(); 
    handler.setSessionHandler(sessionHandler); 
    ServletHolder holder = handler.addServlet("com.sun.jersey.spi.container.servlet.ServletContainer", "/*"); 
    Map<String,String> initParams = ImmutableMap.of(
      "com.sun.jersey.config.property.packages", "com.test.todo.rest", 
      "com.sun.jersey.api.json.POJOMappingFeature", "true"); 
    holder.setInitParameters(initParams); 
    return handler; 
    } 
} 

리소스 :

@XmlRootElement 
public class Todo { 
    private String summary; 
    public String getSummary() { return summary; } 
    public void setSummary(String summary) { this.summary = summary; } 
} 

Webservice를 :

@Path("/todo") 
public class TodoResource { 
    @GET 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    public Todo getTodo() { 
    Todo todo = new Todo(); 
    todo.setSummary("This is my first todo"); 
    return todo; 
    } 
} 

테스트 :

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
WebResource service = client.resource(getBaseURI());  
System.out.println(
    service.path("game").path("todo"). 
    accept(MediaType.APPLICATION_JSON).get(String.class)); 

출력 부두 서버 :

May 24, 2012 4:21:34 PM com.sun.jersey.spi.container.ContainerResponse write 
SEVERE: A message body writer for Java class com.test.todo.rest.Todo, and Java type class com.test.todo.rest.Todo, and **MIME media type application/json was not found** 

May 24, 2012 4:21:34 PM com.sun.jersey.spi.container.ContainerResponse write 
SEVERE: The registered message body writers compatible with the MIME media type are: 
*/* -> 
com.sun.jersey.core.impl.provider.entity.FormProvider 
com.sun.jersey.core.impl.provider.entity.StringProvider 
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider 
com.sun.jersey.core.impl.provider.entity.FileProvider 
com.sun.jersey.core.impl.provider.entity.InputStreamProvider 
com.sun.jersey.core.impl.provider.entity.DataSourceProvider 
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General 
com.sun.jersey.core.impl.provider.entity.ReaderProvider 
com.sun.jersey.core.impl.provider.entity.DocumentProvider 
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider 
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter 
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter 
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General 
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General 

May 24, 2012 4:21:34 PM com.sun.jersey.spi.container.ContainerResponse logException 
SEVERE: Mapped exception to response: 500 (Internal Server Error) 
javax.ws.rs.WebApplicationException: 
com.sun.jersey.api.MessageException: A message body writer for Java class com.test.todo.rest.Todo, and Java type class com.test.todo.rest.Todo, and MIME media type application/json was not found 
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:285) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.jvva:1451) 
... 

질문 :

가 어떻게 부두에서 저지 서블릿을 사용하여 지원되는 MIME 형식으로 '응용 프로그램/JSON'를 추가해야 ? com.sun.jersey.api.json.POJOMappingFeature를 true로 설정하는 것이 트릭이라고 생각했습니다. (XML을 올바르게 가져 오면 작동하지만 Json과도 함께 작동해야합니다.)

답변

0

클래스 경로에 jersey-jackson을 추가하십시오.

+2

고마워요! POM에 'jersey-json'을 추가하면 트릭을 만들었습니다! – perseger

관련 문제