2017-06-01 37 views
0

我想我公司與特定鏈接,所以我決定再在我的函數添加一個參數(函數RESPONSABLE創建公司)。下面是代碼:加入的人ID的功能RESPONSABLE創建公司(JEE - Web服務)

@POST 
    public Response create(Long idPerson, CompanyDTO company , @Context UriInfo uriInfo) { 
    if(company == null) 
     throw ... 
    if(idPerson == null) 
     throw ... 
    CompanyDTO companyUsed = company; 
    PersonDTO person = 
    this.servicePerson.searchPersonById(idPerson); 
    companyUsed.setPerson(person); 
    Long idCompany = 
    this.service.saveCompany(companyUsed); //serviceCompany 
    if(idCompany == null) 
    throw ... 
    UriBuilder builder = uriInfo.getAbsolutePathBuilder(); 
    builder.path(Long.toString(idCompany)); 
    return Response.created(builder.build()).build(); 
} 

當我不使用idPerson在參數它工作得很好,但我在我的代碼指定靜態idPerson

public Response create(CompanyDTO company , @Context UriInfo uriInfo) { 
... 
PersonDTO person = 
this.servicePerson.searchPersonById(1L); // I specify it here statically 
... } 

因此,這裏的問題我想補充idPerson在我的參數。如果我這樣做,我得到了500錯誤。這裏是我的例外的一部分:

com.sun.jersey.spi.container.ContainerResponse.mapMappableContainerException 
The exception contained within MappableContainerException could not be 
mapped to a response, re-throwing to the HTTP container 
org.codehaus.jackson.map.JsonMappingException: Can not deserialize 
instance of java.lang.Long out of START_OBJECT token 

回答

0

的個人標識符可以(它將成爲URL的一部分)定義爲路徑參數:

@POST 
@Path("{idPerson}") 
public Response create(@PathParam("idPerson") Long idPerson, 
         @Context UriInfo uriInfo, CompanyDTO company,) { 
    ... 
} 
+0

如果我這樣做,我得到了一個405錯誤(方法不允許)@Molin – bsm

+0

@ysd你的要求是什麼樣的? –

+0

如果我理解你在代碼中做了什麼,它應該是這個URL POST **/companies/idPerson(所以我創建一個Person)然後我做了POST ** link/companies/1 **,它不起作用當然POST **鏈接/公司**不起作用。我想將一家公司與一個人聯繫起來,問題是如何指定此人。我的頭文件**內容類型應用程序/ json ** Body公司JSON。@ Molin – bsm