簡體   English   中英

Jersey Web服務不處理XML,而是JSON

[英]Jersey web service not handling XML, but JSON

我目前正在開發一個Jersey / Hibernate Web服務(在Tomcat 9容器中),它應該能夠使用和生成JSON(application / json)和XML(application / xml)。 它支持GET和POST來使用這些類型。 支持並運行DELETE,以及JSON的GET和POST。 但是一旦我嘗試使用XML內容類型,我就會收到500內部服務器錯誤。

結構如下:(檢查下面的代碼)歌曲列表(歌曲列表類)有一個歌曲列表和一個所有者(用戶類)。

您可以在/(myWSname)/ songs / {id}下以XML格式獲得一首歌,也可以毫不費力地發布一首歌。

我假設這里的問題是XML注釋,因為對於JSON,一切都像現在一樣。 我試圖添加@XmlElement和@AccessorType(FIELD)。 這些都沒有幫助。 此外,一切適用於/(myWSname)/ songs / {id}下的歌曲。

    @Entity
    @Table(name="songlists")
    @XmlRootElement(name = "songList")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Songlist {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @JsonProperty(value = "id")
    @XmlElement
    private int id;

    @JsonProperty("name")
    @XmlElement
    private String name;

    @ManyToOne
    @JsonProperty("owner")
    @JoinColumn(name = "owner_id")
    @XmlElement
    private User owner = null;

    @JsonProperty("isPrivate")
    @XmlElement
    private boolean isPrivate;


    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "songlists_songs", joinColumns = {    @JoinColumn(name = "list_id") }, inverseJoinColumns = {
            @JoinColumn(name = "song_id") })
    @XmlElementWrapper(name = "songs")
    @XmlElement(name = "song")
    @JsonProperty(value = "songs")
    private List<Song> songs = null;


    //JAXB no arg constructor 
    public Songlist() {
    }

    // Here: other constructors
    // and Getters and Setters for all fields 


    }```


@Entity
@XmlRootElement(name = "song")
@XmlAccessorType(XmlAccessType.FIELD)
@Table(name="songs")
public class Song {

@Id
@Column(name="song_id")
@JsonProperty("id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@XmlAttribute (name = "id")
private Integer id;

@NotNull
@JsonProperty("title")
@XmlAttribute (name = "title")
private String title;

@JsonProperty("artist")
@XmlAttribute (name = "artist")
private String artist;


@JsonProperty("album")
@XmlAttribute (name = "album")
private String album;


@JsonProperty("released")
@XmlAttribute (name = "released")
private Integer released;

@JsonIgnore
@XmlTransient
@ManyToMany(fetch = FetchType.EAGER, mappedBy="songs")
private List<Songlist> songlists;

//JAXB no arg constructor
public Song() {
}

// here: some other constructors
// and Getters and Setters for all fields

}```

不幸的是,沒有針對此的日志消息。 根據我的研究,顯然這是一個JAXB問題。

解決方案是在User類中創建songfest字段(我沒有發布,因為我沒想到這是錯誤源)XML瞬態,因為這將引用歌曲列表並且歌曲列表將引用用戶。 無休止的循環顯然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM