在负责创建公司的职能中添加人员ID(JEE - webservice)

时间:2017-06-01 14:30:08

标签: web-services java-ee jax-rs

我正在尝试将公司与特定的相关联,因此我决定在我的函数中添加一个参数(负责创建公司的功能)。这是代码:

@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

1 个答案:

答案 0 :(得分:0)

人员标识符可以定义为路径参数(它将成为URL的一部分):

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