我希望能够为我的回复添加新标头。 我收到了错误:
org.glassfish.jersey.message.internal.WriterInterceptorExecutor $ TerminalWriterInterceptor aroundWriteTo 严重:找不到媒体类型= application / json的MessageBodyWriter,type = class java.util.ArrayList,genericType = class java.util.ArrayList。
我的代码如下:
@GET
@Path("/persons")
@Produces({ MediaType.APPLICATION_JSON })
public Response getPersons()
{
List<Person> persons = new ArrayList<Person>();
persons.add(new Person(1, "John Smith"));
persons.add(new Person(2, "Jane Smith"));
return Response.ok(persons).build();
}
当我使用“List”作为返回类型并返回“people”时,返回成功,但当我返回“Response”时,我收到错误。我怎么摆脱这个?
答案 0 :(得分:1)
该例外表明您没有MessageBodyWriter
提供商。基本上,由于MediaType.APPLICATION_JSON
,这意味着您需要在依赖项中使用一些json框架或@Provider
的自定义实现更多关于提供程序1.1 JAX-RS的信息(无法在线查找JSR 339规范,可以下载pdf来自here 2.0 JAX-RS)
可能这会为你解决:
格式
compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.22.2'
对于Maven
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22.2</version>
</dependency>
从此处http://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson
为您的设置选择合适的版本顺便说一下:SO LINK,SO LINK,SO LINK,SO LINK
@peeskillet
评论后更新。
好的一点是,已经有一些json相关提供商,但由于某种原因,它不能编组响应列表。我不能说太多,因为我们需要查看您的设置(pom或gradle构建文件),或者您可以尝试使用https://stackoverflow.com/a/6081716/1032167或此https://stackoverflow.com/a/35039968/1032167之类的内容来解决它。
因此,使用(选项1)Jackson
或使用(选项2)
GenericEntity<List<Person>> entity = new GenericEntity<List<Person>>(persons) {};
Response.ok(entity).build();
答案 1 :(得分:0)
将Jackson功能注册到Jersey配置中。这将自动将杰克逊的入站和出站映射功能添加到Jersey。
public class JerseyConfig extends ResourceConfig {
public JerseyConfig() {
...
register(JacksonFeature.class);
...
}
有关详细信息,请参阅https://jersey.java.net/documentation/latest/media.html#json.jackson。