在否定params

时间:2018-04-04 16:16:01

标签: spring spring-rest spring-web

我有两种弹簧控制器方法:

@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"样式表达式表示指定的   参数不应该出现在请求中。

2 个答案:

答案 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