当前位置: 首页 > 知识库问答 >
问题:

泽西Web服务不处理XML,而是处理JSON

翟奇逸
2023-03-14

我目前正在开发Jersey/Hibernate web服务(在Tomcat 9容器中),它应该能够使用和生成JSON(应用程序/JSON)和XML(应用程序/XML)。它支持GET和POST来使用这些类型。DELETE是受支持的,并且可以工作,对于JSON,GET和POST也是如此。但是,当我尝试使用XML内容类型时,我得到了一个500内部服务器错误。

结构如下:(检查下面的代码)歌曲列表(songlist类)有一个歌曲列表和一个所有者(用户类)。

您可以在/(myWSname)/歌曲/{id}下以XML格式获取歌曲并轻松发布。

我假设这里的问题是XML注释,因为对于JSON,一切都像现在一样工作。我试图添加@xmlement和@AccessorType(FIELD)。这些都没有帮助。此外,对于/(myWSname)/歌曲/{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问题。

共有1个答案

厍浩广
2023-03-14

解决方案是使用户类(我没有发布,因为我不认为这是错误源)中的songfest字段成为XML瞬态字段,因为这将引用歌曲列表,而歌曲列表将引用用户。显然是无休止的循环

 类似资料:
  • 我正试图使Web服务与protobuf和json一起工作。问题在于,为了构建我的proto,我需要能够读取inputStream(至少我没有看到其他方法)。 我为protobuf创建了一个转换器: 在我的Spring配置中使用: 我的控制器: 问题是,如果我让控制器这样做,我会得到一个错误,因为我的webservice不支持application/octet流。 [main]信息组织。日食码头。服

  • 我是JavaWeb服务的新手,我正在努力解决一个基本问题。 在找到了一堆过时的示例后,我设法找到了一些使用XML的方法,但是当我要求它返回JSON时,相同的代码就不起作用了。 起初我认为它缺少JSON格式化程序,但JAXB应该负责从POJO到JSON的转换,所以我认为这不是问题所在。 Tomcat中引发的错误是: 网状物。XML Todo.java TodoResource。Java语言 你知道为

  • 问题内容: 有没有办法在Jersey中进行全局异常处理?我希望有一种方法可以将其放置在实际调用资源的地方,而不是单个资源具有try / catch块,然后调用某种方法来清理将要发送回客户端的所有异常。这有可能吗?如果是这样,怎么办? 而是在哪里向Jersey Servlet抛出某种Jersey配置的异常: 具有: 异常会被抛出到我可以拦截并从那里调用的东西。 实际上,这仅仅是为了简化Jersey的

  • 我正在处理一个多数据库的设置,技术栈的spring和hibernate在Tomcat6上运行。跨数据库的事务不是必需的,每个数据库都有自己的dataSource、sessionFactory和transactionManager(org.springframework.orm.Hibernate3.HibernateTransactionManager),并声明性地使用事务管理(@Transact

  • XML作为一种数据交换和信息传递的格式已经十分普及。而随着Web服务日益广泛的应用,现在XML在日常的开发工作中也扮演了愈发重要的角色。这一小节, 我们将就Go语言标准包中的XML相关处理的包进行介绍。 这个小节不会涉及XML规范相关的内容(如需了解相关知识请参考其他文献),而是介绍如何用Go语言来编解码XML文件相关的知识。 假如你是一名运维人员,你为你所管理的所有服务器生成了如下内容的xml的

  • 问题内容: 我一直坚持使用jersey库为RESTful Web服务创建gradle项目。项目配置应该能够在码头应用服务器内启动服务。我已经找到了资源:https : //github.com/ziroby/jetty-gradle-hello- world 该解决方案的我的问题是,它使用的是球衣的过时版本。我至少需要版本2(最好是最新的2.14)。我试图在Maven Central上搜索新版本,