JAXB oder JAX-RS ist die Verpackung zahlen in meiner JSON-Antworten mit Zitaten, um Sie in strings. Warum ist dies das Standardverhalten ist, und wie man es beheben?

Derzeit arbeite ich an einer RESTful API. Ich habe eine Klasse Mitarbeiter und eine EmployeeResource Klasse. Ich habe auch eine benutzerdefinierte DateAdapter, ändert sich mein Datum Eigenschaften zu Lang Zeitstempel. Allerdings hat mein JSON-Antworten zeigen, sind die Zeitstempel als String (eingewickelt in Anführungszeichen) eher als zahlen (ohne Anführungszeichen) ein. Hier ist eine abgekürzte version von meinem code und erfasst JSON-Antwort...

Benutzerdefinierte DateAdapter

public class DateAdapter extends XmlAdapter<Long, Date> {
    @Override
    public Date unmarshal(Long v) throws Exception {
        return new Date(Long.valueOf(v));  
    }
    @Override
    public Long marshal(Date v) throws Exception {
        return v.getTime();  
    }
}

Entity-Klasse

@Entity
@javax.xml.bind.annotation.XmlRootElement
@XmlType(propOrder={"createdOn","empId"})
public class Employee implements Serializable {
    private Date createdOn;
    private Integer empId;

    @Column(nullable=false)
    @Temporal(TemporalType.TIMESTAMP)
    @XmlJavaTypeAdapter(DateAdapter.class)
    public Date getCreatedOn() {
        return createdOn;
    }
    public void setCreatedOn(Date createdOn) {
        this.createdOn = createdOn;
    }

    @Id
    @XmlID
    public Integer getEmpId() {
        return empId;
    }
    public void setEmpId(Integer empId) {
        this.empId = empId;
    }
}

EmployeeResource

@Path("/Employees")
@javax.xml.bind.annotation.XmlRootElement 
@XmlType(propOrder={"hateoas","employees"})
public class EmployeeResource {
    List<Employee> employees;

    public List<Employee> getEmployees() {
        return employees;
    }
    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
    @GET
    @Path("/{id}")
    @Produces("application/json")
    public Response getEmployee(@Context UriInfo ui, @PathParam("id") Integer id) {
        Session session = HibernateUtil.getSession();
        session.beginTransaction();
        Criteria criteria=session.createCriteria(Employee.class);
        criteria.add(Restrictions.eq("empId", new Integer(10150)));
        this.employees = criteria.list();
        return Response.ok(this).build();
    }
}

Aktuellen JSON-Antwort

{
  "employees":{
    "createdOn":"1330915130163",
    "empId":"10150"
  }
}

Erwarteten JSON-Antwort

{
  "employees":{
    "createdOn":1330915130163,
    "empId":10150
  }
}

Gehe ich davon aus, dass es einige Weg, um zu verhindern, dass JAXB oder JAX-RS wickelt alle zahlen in Anführungszeichen. Könnte jemand mich leiten, wo könnte ich dies konfigurieren?

Vielen Dank im Voraus!

EDIT #1 2012.03.07
Ok, also nach etwas mehr recherche, ich denke, mein problem ist mit der Standard-JSONConfiguration.Notation verwendet wird, ZUGEORDNET . Es sieht aus wie die NATÜRLICHE JSONConfiguration.Notation würde, mich das, was ich will. Aber ich habe nicht gefunden ein klares Beispiel dafür, wie man diese Anwendung breit. Ich gehe davon aus, ich würde geben Sie dies in meinem ApplicationConfig Klasse erweitert javax.ws.rs.core.- Anwendung .

EDIT #2 2012.03.10
Ok, also nach etwas mehr recherche entschied ich mich für die JSON-parser-Bibliothek, Jackson. Es scheint die komplette JSON-Lösung gibt, mit nur der Standard-Konfiguration. Standardmäßig Daten übersetzt werden, um Ihre entsprechenden Zeitstempel und serialisiert als zahlen (w/o quotes). Der einzige Nachteil ich habe, ist, dass Jackson derzeit keine Unterstützung für die JAXB-Annotationen, "@XmlID" und "@XmlIDREF". Da habe ich direkte self-references in meinem Datenmodell (nicht oben gezeigt wird), die ich erstellt habe, eine weitere Frage zu diskutieren. Wenn jemand interessiert ist klicken Sie hier, um zu Folgen, dass der thread...

InformationsquelleAutor hypno7oad | 2012-03-07
Schreibe einen Kommentar