如何在同一个Web服务中获取@PathParam和请求正文?

时间:2015-06-30 09:56:04

标签: java web-services resteasy

我正在调用服务,并希望映射来自路径参数和请求正文的数据。 web-services调用是POST的类型。 这里的问题是如果我使用@Form然后我只获得路径参数 这是一个场景。

 Case1 Url :- Response updateDepartment(@Form @Valid Department departmentObject)

我将路径参数值作为departmentNumber,departmentSNumber和departmentName 但是没有获得包含addRequest [{}]和removeRequest [{}]

的请求主体

如果我只使用@Valid那么

 Case 2 Url :- Response updateDepartment(@Valid Department departmentObject)

在这种情况下,我得到addRequest [{}]和removeRequest [{}]值。 但对象但现在缺少departmentNumber,departmentSNumber和departmentName

Department.java

public class Department
    {

    @PathParam(DEPTNUMBER_PARAM)
    private String deptNumber;

    @PathParam(DEPT_S_PARAM)
    private String deptSNumber;


    @PathParam(DEPARTMENT_NAME)
    private String departmentName;

    private List<String> addRole;

    private List<String> removeRole;

    }

如何映射@PathParam的值以及请求正文值。 这是电话

http://localhost:8080/myweb/departments/1234/4321/finance
{
    "addRole": [
            101,
             181
    ],
    "removeRole": [
            42,
             12
    ]
   }

1 个答案:

答案 0 :(得分:1)

你为什么不用这个:

Response updateDepartment(@Valid Department departmentObject, @PathParam("departmentNumber") String departmentNumber....)

你想要它不会起作用。我会尽力解释。 首先,我认为你使用的是resteasy而不是JAX-RS参考,对吗? 在RestEasy for @Form中,它说:

  

这可以用作传入/传出请求/响应的值对象。您可以在参数的字段/方法上重复使用@ * Param注释,以便从请求或编组到解析,取决于您是使用服务器端JAX-RS还是Resteasy客户端框架

在您的情况下,您在参数的字段上使用@PathParam,这就是填充的原因。

当您不使用@Form时,无论您为参数指定何种类型,它都会尝试与请求正文匹配,在您的情况下,它只包含两个数组而不包含PathParam。它不会查看其他任何内容的路径参数,从而忽略了您的注释。