返回列表为json使用jersey / spring rest服务器给出错误?

时间:2016-05-06 20:16:14

标签: java json rest jersey

我希望能够为我的回复添加新标头。 我收到了错误:

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”时,我收到错误。我怎么摆脱这个?

2 个答案:

答案 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 LINKSO LINKSO LINKSO 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