2014-11-28 2 views
0

Я работаю в Restful service. Проблема возникла после того, как мы перешли в Glassfish 4.1. Строка ошибки:Restful MessageBodyWriter не найден

СИЛЬНЫЙ: MessageBodyWriter не найдено для типа носителя = приложения/XML, тип = ...

Но мои классы потребляют приложения/JSON. Вот пример:

@Path("get_customer_info") 
@Consumes("application/json;charset=utf8") 
public class CustomerInfoResource { 

    @Context 
    private UriInfo context; 

    public CustomerInfoResource() { 
    } 

    @POST 
    public Player getPlayerInfo(){ 
    .... 
    } 
} 

Я сделал следующее и не мог решить: Добавлены все трикотажные фляг версии 2.13, джексон баночки 2.4.3. Также добавлен jersey-media-json-jackson-2.13.jar, который содержит класс org.glassfish.jersey.jackson.JacksonFeature. Кстати ApplicationConfig класс:

@javax.ws.rs.ApplicationPath("resources") 
public class ApplicationConfig extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); 
     try { 
      Class jsonProvider = Class.forName("org.glassfish.jersey.jackson.JacksonFeature"); 
      resources.add(jsonProvider); 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     addRestResourceClasses(resources); 
     return resources; 
    } 
+0

ли вы попробовать добавить аннотацию @Produces на уровне класса. Кажется, что проблема возникает при написании ответа. – CuriousMind

+0

Конечно, попробовал @Produces, но он также не решен. Фактически проект работал в Glassfish 4.0. Проблема возникает только в Glassfish 4.1. –

+0

Я думаю, причина в том, что по умолчанию ваш метод post создает XML, а ваш класс 'Player' не является сериализуемым. Если вы хотите обойти это легко, и вы не возражаете против возвращения Json, вы можете использовать что-то вроде [Gson] (https://code.google.com/p/google-gson/), а затем сделать что-то вроде этого : 'BagOfPrimitives obj = new BagOfPrimitives(); Gson gson = new Gson(); Строка json = gson.toJson (obj); ' – frmi

ответ

0

Я думаю, что у вас есть упоминания @Consumes ("применение/JSON") в вашей реализации MessageBodyReader. Я уже написал какой-то пользовательский MessageBodyWriter с помощью @Produces. Он отлично работает для меня. Я надеюсь, что это будет работать для вас в случае MessageBodyReader

См: http://h2labz.blogspot.in/2014/12/marshalling-java-to-json-in-jax-rs.html

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