【问题标题】:Jackson List<E> json serializationJackson List<E> json序列化
【发布时间】:2014-08-30 23:39:04
【问题描述】:

嗨,我正在创建一个 jersey 2.0+ REST Web 服务。我使用的是 1.7,现在我正在尝试将其迁移到 2.0。

我有 2 个带有 E 对象的类用于处理响应:

public class JsonMessageSingle<E> {

private int status;
private String message;
private E data; // for single objects

}

还有一个使用:

private List<E> data; // for list of objects

我的回复都是这样的格式:

@GET
@Produces("application/json")
public JsonMessageList<User> getUser() {
    List<User> list = new UserDao<User>().findAll();

    return new JsonMessageList<User>(list); //constructor create status and message basesd on object passed (if null == "error")
}


使用 jersey 1.7 响应一切正常,但现在我得到了:

HTTP Status 500 - Internal Server Error

并且控制台上没有异常/错误。它无法序列化 List>E

【问题讨论】:

  • 唯一的泛型类是否没有序列化为 JSON 或所有其他类?如果您可以获取异常详细信息,那将非常容易诊断问题。
  • 它只是 E。如果我更改返回到 JsonMessageList(而不是 JsonMessageList)它会序列化,但用户列表只是对象的 java id(user@ihdh342bd,那个 java id ,而不是用户)。我使用带有球衣的Tomcat,控制台中没有错误,日志中也没有。感谢您的回复。

标签: java json serialization jersey jackson


【解决方案1】:

发现这是我的错误。即使您将 jackson 作为依赖项(如 jersey 本身所建议的那样),您也必须配置 jersey.media 以使用 jackson 作为默认解析器。

使用 maven,更新您的 pom.xml:

<dependency>
   <groupId>org.glassfish.jersey.media</groupId>
   <artifactId>jersey-media-json-jackson</artifactId>
   <version>2.10.1</version>
</dependency>

代替:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
   <version>2.10.1</version>
</dependency>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 2023-03-04
    • 2018-02-28
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多