我正在调用服务,并希望映射来自路径参数和请求正文的数据。 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
]
}
答案 0 :(得分:1)
你为什么不用这个:
Response updateDepartment(@Valid Department departmentObject, @PathParam("departmentNumber") String departmentNumber....)
你想要它不会起作用。我会尽力解释。 首先,我认为你使用的是resteasy而不是JAX-RS参考,对吗? 在RestEasy for @Form中,它说:
这可以用作传入/传出请求/响应的值对象。您可以在参数的字段/方法上重复使用@ * Param注释,以便从请求或编组到解析,取决于您是使用服务器端JAX-RS还是Resteasy客户端框架
在您的情况下,您在参数的字段上使用@PathParam,这就是填充的原因。
当您不使用@Form时,无论您为参数指定何种类型,它都会尝试与请求正文匹配,在您的情况下,它只包含两个数组而不包含PathParam。它不会查看其他任何内容的路径参数,从而忽略了您的注释。