首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jackson - jackson不为嵌套对象创建json

jackson - jackson不为嵌套对象创建json
EN

Stack Overflow用户
提问于 2016-03-18 19:37:30
回答 2查看 891关注 0票数 1

我有一个用户列表类和一个返回用户列表和总记录的API。课程如下:

代码语言:javascript
复制
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FMSResponseInfo {

    @JsonProperty("status")
    private String status;
    @JsonProperty("message")
    private String message;
    @JsonProperty("data")
    private Object data;

    @JsonProperty("status")
    public String getStatus() {
        return status;
    }

    @JsonProperty("status")
    public void setStatus(String status) {
        this.status = status;
    }

    @JsonProperty("message")
    public String getMessage() {
        return message;
    }

    @JsonProperty("message")
    public void setMessage(String message) {
        this.message = message;
    }

    @JsonProperty("data")
    public Object getData() {
        return data;
    }

    @JsonProperty("data")
    public void setData(Object data) {
        this.data = data;
    }
}

@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserListResDTO {

    @JsonProperty("users")
    private List<UserDTO> users;
    @JsonProperty("totalRecords")
    private long totalRecords;

    public List<UserDTO> getUsers() {
        return users;
    }
    public void setUsers(List<UserDTO> users) {
        this.users = users;
    }
    public long getTotalRecords() {
        return totalRecords;
    }
    public void setTotalRecords(long totalRecords) {
        this.totalRecords = totalRecords;
    }
}

我正在FMSResponseInfo中设置一个FMSResponseInfo类型的对象,如下所示。

到目前为止,我已经成功地创建了web服务并以json的身份返回响应。但是我面临的问题是API返回响应如下:{"data":"org.package.UserListResDTO@70783307","message":"Success","status":"200"}

我就是这样写web服务的:

代码语言:javascript
复制
    @Path("/getUsers")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public FMSResponseInfo getUsers(@QueryParam("page") @DefaultValue("0") int page) {
        System.out.println("In getUsers()");
        FMSResponseInfo fmsResponseInfo = new FMSResponseInfo();
        try {
            UserListResDTO userList = fmsUserManager.getAllUsers(page);
            fmsResponseInfo.setData(userList);
            fmsResponseInfo.setStatus(FMSErrorMessageEnum.SUCCESS_CODE.getValue());
            fmsResponseInfo.setMessage(FMSErrorMessageEnum.SUCCESS_MESSAGE.getValue());
        } catch (Exception e) {
            return FMSUtil.getErrorResponseInfo(FMSErrorMessageEnum.INTERNAL_SERVER_ERROR_CODE.getValue(),
                    e.getMessage());
        }
        System.out.println("Out getUsers()");
        return fmsResponseInfo;
    }

我想依赖关系存在一些问题,或者是一些我无法解决的问题。我的pom中的主要依赖项是:

代码语言:javascript
复制
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
        </dependency>

我正在通过扩展Application类来创建Web服务,如下所示:

代码语言:javascript
复制
@ApplicationPath("rest")
public class FMSApplication extends Application {    
    public Set<Class<?>> getClasses(){
        Set<Class<?>> set = new HashSet<Class<?>>();
        set.add(FMSUserManagerWebService.class);
        set.add(FMSDocumentManagerWebService.class);
        set.add(FMSInboxManagerWebService.class);
        set.add(FMSLocationManagerWebService.class);
        return set;
    }       
}

任何帮助都将是非常感谢的,因为我是这个REST web服务的新手,并且已经被困了很长时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-18 20:22:24

这个链接将解释答案。

https://jersey.java.net/documentation/latest/media.html#d0e7963

9.1.1.1.POJO支持 POJO支持是将Java对象转换为JSON和back的最简单方法。 支持这种方法的媒体模块是MOXy和Jackson。

指向杰克逊的链接包括

9.1.4.1.依赖性 要使用Jackson2.x作为JSON提供程序,需要向pom.xml文件中添加jersey Jackson模块

代码语言:javascript
复制
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.22.2</version>  
</dependency>

我对moxy不太了解,但是你的CLASSPATH上有杰克逊,并且使用了杰克逊的年刊。然而,泽西被配置为使用moxy。

从链接

JSON通过MOXy的绑定支持是泽西应用程序自Jersey2.0以来支持JSON绑定的一种默认和首选方法。当JSON MOXy模块在类路径上时,泽西将自动发现该模块,并在应用程序中通过MOXy无缝地启用JSON绑定支持。

MOXy似乎处理了FMSResponseInfo。为什么它没有处理另一个我不知道的物体。但是既然你想使用杰克逊,你就应该使用杰克逊模块。

票数 2
EN

Stack Overflow用户

发布于 2016-03-18 20:05:59

正如Shire驻地在使用以下依赖项的评论中所建议的那样,我能够解决这个问题:

代码语言:javascript
复制
<dependency> 
  <groupId>org.glassfish.jersey.media</groupId> 
  <artifactId>jersey-media-json-jackson</artifactId> 
  <version>2.22.2</version> 
</dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36092906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档