2014-02-23 219 views
0

我想在傳遞json對象時調用post方法,但是當我打印對象時它是以單位形式。POST請求澤西服務

我做這樣的事情 curl -X POST -H 'Content-Type: application/json' -d '{"distributors":{"distributorId":"5","name":"SA"}}' {path}

這裏的Java代碼:

package com.rest.resource; 

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

@XmlRootElement(name = "distributors") 
public class Distributor 
    { 
    @XmlElement 
    private long distributorId; 
    @XmlElement 
    private String name; 

    public Distributor() 
     { 
     } 

    public Distributor(final long distributorId,final String name) 
     { 
     this.distributorId = distributorId; 
     this.name = name; 
     } 
    @Override 
    public String toString() 
     { 
     return "distributors: {distributorId = " + distributorId + ", name = " + name + "}"; 
     } 
    } 

方法在資源

@POST 
    @Path("") 
    public Response addDistributor(final JAXBElement<Distributor> element) 
     { 
     final Distributor distributor = element.getValue(); 
     System.out.println(distributor); 
     return Response.status(200).entity(distributor.toString()).build(); 
     } 

感謝。

+0

奇怪的是使用澤西1.3它完美對我來說,什麼1.4或在它上面似乎沒有正常工作。使用1.3,我在我的控制檯中獲得'發行商:{distributorId = 5,name = SA}'。 – Durandal

+0

即使澤西島1.3也沒有任何變化.. – user1552879

+0

如果我將'JAXBElement element'更改爲'分銷商分銷商',它對我有用。否則,我會得到:'JSONMappingException:找不到合適的構造函數' – Durandal

回答

0

我所做的只是改變返回類型是這樣的:

@POST 
@Path("/distpost") 
@Produces(MediaType.APPLICATION_JSON) 
public Response addDistributor(final Distributor distributor) { 
    System.out.println(distributor); 
    return Response.status(201).entity(distributor.toString()).build(); 
} 

,它處理這樣的捲曲測試:

curl -X POST -H 'Content-Type: application/json' -d '{"distributor": {"distributorId":5,"name":"SA"}}' <url> 
+0

我已經在您的評論之後嘗試了這個,使用Jersey版本1.3但是在加載我的Apache時抱怨一些Servlet不在那裏。 – user1552879