Jersey-media-moxy:APPLICATION_JSON忽略@XmlElement注释

时间:2017-11-08 13:25:21

标签: java json jersey

我正在使用Jersey创建一个REST-API。要做到这一点,我正在学习PluralSight课程。

我已经使用jersey-media-moxy依赖(v2.26)安装了Jersey 2.2。我将以下资源返回以解析为JSON:

@XmlRootElement
public class Playlist {
    private int id;
    private String naam;
    private int eigenaarID;
    private Boolean owner;

    public void setData(int id, String naam, int eigenaarID) {
        this.id = id;
        this.naam = naam;
        this.eigenaarID = eigenaarID;

        if(eigenaarID == 0) {
            owner = false;
        } else {
            owner = true;
        }
    }

    @XmlElement(name="id")
    public int getID() {
        return id;
    }

    @XmlElement(name="name")
    public String getNaam() {
        return naam;
    }

    public Boolean getOwner() {
        if(eigenaarID == 0) {
            return false;
        }
        return true;
    }

    public ArrayList<Track> getTracks(){
        return new ArrayList<Track>();
    }
}

如果我输出XML(使用@Produces(MediaType.APPLICATION_XML)),则“getNaam”的属性会被正确地重命名为“name”而不是“naam”。当我输出JSON(@Produces(MediaType.APPLICATION_JSON))时,不仅我的属性没有被重命名,所以私有属性也被输出。有什么问题?

2 个答案:

答案 0 :(得分:0)

您必须在@XmlElement中更改它(name =&#34; name&#34;)。

答案 1 :(得分:0)

我最终使用了杰克逊。我使用此StackOverflow entry进行了设置。

我的MyApplication如下所示:

package com.weijland.spotitube;
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("services")
public class MyApplication extends ResourceConfig {
    public MyApplication() {
        packages("org.glassfish.jersey.jackson.JacksonFeature");
    }
}

我最终使用了这种依赖:

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