我正在调用服务,并希望从路径参数和请求主体映射数据。Web服务调用是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
部门.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
]
}
你为什么不使用这个:
Response updateDepartment(@Valid Department departmentObject, @PathParam("departmentNumber") String departmentNumber....)
您想要的将不起作用。我会尽力解释。首先,我认为您正在使用resteasy而不是JAX-RS参考,对吗?在RestEasy中@Form注释中说:
可以用作传入/传出请求/响应的值对象。您可以重复使用参数的字段/方法上的@ * Param批注,以从请求或编组到响应中解组,这取决于您使用的是服务器端JAX-RS还是Resteasy客户端框架
在您的情况下,您在参数的字段上使用@PathParam,这就是为什么要填充它的原因。
当您不使用@Form时,为参数指定的任何类型都会尝试与请求正文匹配,在您的情况下,请求正文仅包含两个数组,而不包含PathParam。它不会查看路径参数的其他内容,因此会忽略您的注释。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句