gpt4 book ai didi

java - 如何将自定义 MessageBodyWriter 应用于对象列表?

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:07 27 4
gpt4 key购买 nike

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

 @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 not found for media 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 寻找 MessageBodyWriter类型 java.util.List ,但只找到 MessageBodyWriter<Test> ,因此要么为列表 MessageBodyWriter<java.util.List> 创建一个新列表或使用Object并在 Object 类上使用 if else 。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com