在Dropwizard Web服务中,我想使用以下自定义Test返回数据库中类MessageBodyWriter的对象。

 @Provider
 @Produces("application/Test")
 public class TestMarshaller implements MessageBodyWriter<Test>{
     public long getSize(Test obj, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
         return -1;
     }
     public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
         return type == Test.class;
     }
     public void writeTo(Test obj, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType,
        MultivaluedMap<String, Object> httpHeaders, OutputStream outputStream) throws IOException, WebApplicationException {
        httpHeaders.add("Content-Type", "text/plain; charset=UTF-8");
        StringBuffer str = new StringBuffer();
        str.append(obj.getData());
        outputStream.write(str.toString().getBytes());
     }
}


使用以下方法对单个对象正常工作

@GET
@Produces("application/Test")
@Path("/{ID}")
public Test getTest(@PathParam(value = "ID") LongParam ID) {
    Test result = Test.findInDB(ID.get());
    return result;
}


现在,我想对元素列表使用相同的MessageBodyWriter

@GET
@Produces("application/Test")
@Path("/{ID}")
public List<Test> getTest(@PathParam(value = "ID") String IDs) {
    List<Test> listTest = Test.findMultiInDB(IDs);
    return listTest;
}


导致错误


  org.glassfish.jersey.message.internal.WriterInterceptorExecutor:找不到MessageBodyWriter用于媒体type = application / Test,type = class java.util.ArrayList,genericType = java.util.List。


search建议使用GenericEntity

@GET
@Produces("application/Test")
@Path("/{ID}")
public Response getTest(@PathParam(value = "ID") String IDs) {
    List<Test> listTest = Test.findMultiInDB(IDs);
    GenericEntity<List<Test>> result = new GenericEntity<List<Test>>(listTest) {};
    return Response.ok(result).build();
}


不幸的是,它导致了与上述完全相同的错误。
我的问题是我需要更改使其工作还是需要处理列表的另一个MessageBodyWriter

最佳答案

错误消息很清楚,Jersey寻找类型为MessageBodyWriterjava.util.List,但仅找到MessageBodyWriter<Test>,因此请为列表MessageBodyWriter<java.util.List>创建一个新的或使用Object并在Object类上使用其他代码。

关于java - 如何将自定义MessageBodyWriter应用于对象列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47254744/

10-11 12:37