2016-09-18 3 views
0

Я пытаюсь вернуть POJO в формате JSON с Джерси, однако я получаю следующее сообщение об ошибке:Джерси со встроенным Jetty - MessageBodyWriter не нашли применение/JSON

Однако, когда я бегу вверх приложение я получаю:

SEVERE: MessageBodyWriter not found for media type=application/json, type=class com.uk.jacob.model.Person, genericType=class com.uk.jacob.model.Person. 

у меня есть следующий Джерси ресурс

@Path("") 
public class TestResponse { 

    @GET 
    @Path("hello") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response paramMethod() { 
     CacheControl control = new CacheControl(); 
     control.setMaxAge(60); 

     Person jacob = new Person("Jacob"); 

     return Response 
       .ok(jacob) 
       .cacheControl(control) 
       .build(); 
    } 
} 

с простой Person POJO

public class Person { 
    private String firstName; 

    public Person(String firstName){ 
     this.firstName = firstName; 
    } 

    public String getFirstName(){ 
     return firstName; 
    } 
} 

Со следующим внедренного Jetty конфигурации

public static void main(String[] args) { 

     ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); 
     context.setContextPath("/"); 

     String webPort = System.getenv("PORT"); 
     if(webPort == null || webPort.isEmpty()) { 
      webPort = "3000"; 
     } 

     Server jettyServer = new Server(Integer.valueOf(webPort)); 
     jettyServer.setHandler(context); 

     ServletHolder jerseyServlet = context.addServlet(ServletContainer.class, "/*"); 
     jerseyServlet.setInitOrder(0); 

     jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "com.uk.jacob.api"); 
     jerseyServlet.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true"); 

     try { 
      jettyServer.start(); 
      jettyServer.join(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      jettyServer.destroy(); 
     } 
    } 

Как вы можете видеть выше, я позволил POJOMappingFeature

jerseyServlet.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true"); 

ответ

2

POJOMappingFeature для Джерси 1. Для Джерси 2 следует добавить следующую зависимость

<dependency> 
    <groupId>org.glassfish.jersey.media</groupId> 
    <artifactId>jersey-media-json-jackson</artifactId> 
    <version>${jersey2.version}</version> 
</dependency> 

и зарегистрировать функцию

jerseyServlet.setInitParameter(
     "jersey.config.server.provider.classnames", 
     "org.glassfish.jersey.jackson.JacksonFeature"); 
+0

Мне также пришлось добавить зависимость привязки данных. com.fasterxml.jackson.core джексон-DataBind intended_verion

Смежные вопросы