2013-11-23 3 views
0

Я пытаюсь сопоставить REST-вызов с моим POJO. POJO выглядит следующим образом:Проблема сериализации/сопоставления Dropwizard/Jersey

public class ResultWrapper implements Serializable{ 

    private int total; 
    private List<Movies> movies; ... getters and setters 

В вызове я использую:

WebResource webResource = client.resource(RequestURI + URLEncoder.encode(movie, "UTF-8")); 

ResultWrapper result = webResource.accept("application/json").get(ResultWrapper.class); 

Ошибка:

com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class models.ResultWrapper, and Java type class models.ResultWrapper, and MIME media type text/javascript; charset=ISO-8859-1 was not found 

Клиент является клиентом Джерси. Я пробовал сделать звонок из Chrome (Postman), и это говорит о том, что возвращаемый тип приложения является «text/javascript», а не «application/json», как и следовало ожидать? Думаю, это будет моей проблемой.

Есть ли способ заставить ObjectMapper решить, что это на самом деле «application/json», а не «text/javascript». Я попытался использовать String.class, а затем я просто получил Json-объект.

Моя цель - использовать автоматическое сопоставление с Джерси-клиентом.

Благодарим за любые советы или рекомендации.

ответ

2

попробуйте добавить аннотацию @Produces (MediaType.APPLICATION_JSON)

0

Вы можете попробовать это:

@Provider 
@Produces(application/json) 
public class YourTestBodyWriter implements MessageBodyWriter<ResultWrapper> { 

    private static final Logger LOG = LoggerFactory.getLogger(YourTestBodyWriter.class); 

    @Override 
    public boolean isWriteable(
     Class<?> type, 
     Type genericType, 
     Annotation[] annotations, 
     MediaType mediaType) 
    { 
     return ResultWrapper.class.isAssignableFrom(type); 
    } 

    @Override 
    public long getSize(
     ResultWrapper t, 
     Class<?> type, 
     Type genericType, 
     Annotation[] annotations, 
     MediaType mediaType) 
    { 
     return -1; 
    } 

    @Override 
    public void writeTo(
     ResultWrapper t, 
     Class<?> type, 
     Type genericType, 
     Annotation[] annotations, 
     MediaType mediaType, 
     MultivaluedMap<String, Object> httpHeaders, 
     OutputStream entityStream) throws IOException, WebApplicationException 
    { 
     String message = t.someMethod() 
     entityStream.write(message.getBytes(Charsets.UTF_8)); 
     LOG.info(message); 
    } 

} 

Добавить в ваше приложение запуска():

// Serializer 
environment.jersey().register(new YourTestBodyWriter()); 

Thats обычным способом в вашем приложении.

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