结果的JSON格式不正确

时间:2018-02-24 10:34:08

标签: java rest badgerfish

我已经开发了运行良好的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>

2 个答案:

答案 0 :(得分:2)

是的,这是Badgerfish的documented behaviour

  

元素的文本内容位于对象的$属性中。

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

但是,由于您似乎无论如何都不需要XML表示,我建议您远离Badgerfish进行JSON表示,因为Badgerfish明确意味着从XML文档转换为JSON文档。

答案 1 :(得分:1)

您获得的格式是您提供的Badgerfish。没有办法改变它。要么删除Badgerfish并获得方便的JSON,要么使用该库的工作结果。