2013-11-23 39 views
0

我正在嘗試用我的POJO映射REST調用。該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 

客戶端是一個Jersey客戶端。我嘗試過使用Chrome(Postman)發出的調用,並且希望返回的應用程序類型是「text/javascript」,而不是「應用程序/ json」,正如人們所期望的那樣。我認爲那會是我的問題。

有什麼辦法可以讓ObjectMapper來解析它實際上是「application/json」而不是「text/javascript」。我曾嘗試使用String.class,然後我得到的Json對象就好了。

我的目的是使用Jersey Client的自動映射。

感謝您的任何提示或建議。

回答

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); 
    } 

} 

添加在你的應用程序的run():

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

這就是你的應用程序的正常方式。