【问题标题】:JSON format of result isn't correct结果的 JSON 格式不正确
【发布时间】:2018-02-24 10:34:07
【问题描述】:

我开发了运行良好的 RESTful Web 服务我使用了一个 POJO 和一个服务类,如下所示,但问题是在输出中它显示了额外的 $ 请建议现在如何更正输出是来了

{
   "student":{
      "@id":"10",
      "age":{
         "$":"25"
      },
      "collegeName":{
         "$":"UP College"
      },
      "name":{
         "$":"Ram"
      }
   }
}

我希望输出应该是

{
   "student":{
      "@id":"10",
      "age":25,
      "collegeName":"UP College",
      "name":"Ram"
   }
}

所以下面是我的 POJO

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;


@XmlRootElement(name = "student")
public class Student {

    private int id;
    private String name;
    private String collegeName;
    private int age;

    @XmlAttribute
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @XmlElement
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @XmlElement
    public String getCollegeName() {
        return collegeName;
    }

    public void setCollegeName(String collegeName) {
        this.collegeName = collegeName;
    }

    public int getAge() {
        return age;
    }

    @XmlElement
    public void setAge(int age) {
        this.age = age;
    }

}

下面是我的服务类

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import org.jboss.resteasy.annotations.providers.jaxb.json.BadgerFish;


@Path("/restwb") 
public class StudentService {

    @BadgerFish
    @GET
    //@Path("/{id}")
    @Produces("application/json")
    public Student getStudentDetails(){
        Student student = new Student();
        student.setId(10);
        student.setName("Ram");
        student.setCollegeName("UP College");
        student.setAge(25);
        return student;
    }

}

这是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.concretepage</groupId>
<artifactId>RestWB</artifactId>
<version>1</version>
<packaging>war</packaging>

<dependencies>
     <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>3.0.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>3.0.4.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jettison-provider</artifactId>
        <version>3.0.4.Final</version>
    </dependency>
</dependencies>      
</project>

【问题讨论】:

  • 如果你想要 JSON,为什么要使用 Xml-Annotations?

标签: java rest badgerfish


【解决方案1】:

是的,这是 Badgerfish 的documented behaviour

元素的文本内容放在对象的 $ 属性中。

根据文档,没有明显的方法可以转换为没有@ 的对象属性。 (如果您对@age 感到满意,您可以使用XmlAttribute 代替XmlElement。)

但由于您似乎不需要 XML 表示,我建议您从 Badgerfish 转移到您的 JSON 表示,因为 Badgerfish 明确意味着从 XML 文档到 JSON 文档的转换。

【讨论】:

    【解决方案2】:

    你得到的格式是Badgerfish你给的。没有办法改变它。要么完全移除 Badgerfish 并获得方便的 JSON,要么使用这个库的工作结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多