我有两种弹簧控制器方法:
@RequestMapping(value="/requestotp",method = RequestMethod.POST,params = "!applicationId") //new customer
public OTPResponseDTO requestOTP( @RequestBody CustomerDTO customerDTO){
return customerService.requestOTP(customerDTO);
}
@RequestMapping(value="/requestotp",method = RequestMethod.POST,params = {"idNumber","applicationId"}) //existing customer
public String requestOTP( @RequestParam(value="idNumber") String idNumber , @RequestParam(value="applicationId") String applicationId) {
return customerService.requestOTP(idNumber, applicationId);
}
使用"!applicationId"
,我希望当我用applicationId
参数调用url时,会调用第二个方法,但实际上当我传递这样的请求时:
{"idNumber":"345","applicationId":"64536"}
第一种方法被称为
这是我依赖的params
参数文档的一部分:
最后,"!myParam"样式表达式表示指定的 参数不应该出现在请求中。
答案 0 :(得分:0)
难道你不能简单地删除第一个请求参数吗?
@RequestMapping(value="/requestotp",method = RequestMethod.POST) //new customer
public OTPResponseDTO requestOTP( @RequestBody CustomerDTO customerDTO){
return customerService.requestOTP(customerDTO);
}
答案 1 :(得分:0)
问题实际上并没有否定参数,问题是我在POST主体中发送{"idNumber":"345","applicationId":"64536"}
并且我期望变量被映射到用{{1注释的方法参数} ...这是不正确的...... @RequestParam
只映射网址参数....所以控制器试图找到最佳匹配,因此它使用第一种方法,因为它包含@RequestParam