如果Spring boot REST Api中存在额外的参数,如何拒绝请求并发送自定义消息 @PostMapping() 公共响应创建联系人( @RequestBody ContactRequest ContactRequest)引发IOException{ }

如果Spring boot REST Api中存在额外的参数,如何拒绝请求并发送自定义消息 @PostMapping() 公共响应创建联系人( @RequestBody ContactRequest ContactRequest)引发IOException{ },spring,spring-boot,spring-validator,Spring,Spring Boot,Spring Validator,如何拒绝API请求,如果请求中存在额外参数,默认情况下spring boot将忽略额外参数 我相信您可以添加一个HttpServletRequest作为控制器方法的参数(createContact)。然后您可以访问请求附带的所有参数(查询参数、标题等): @PostMapping 公共响应性createContact(HttpServletRequest请求, @RequestBody ContactRequest ContactRequest)引发IOException{ 布尔值isValid

如何拒绝API请求,如果请求中存在额外参数,默认情况下spring boot将忽略额外参数

我相信您可以添加一个
HttpServletRequest
作为控制器方法的参数(
createContact
)。然后您可以访问请求附带的所有参数(查询参数、标题等):

@PostMapping
公共响应性createContact(HttpServletRequest请求,
@RequestBody ContactRequest ContactRequest)引发IOException{
布尔值isValid=…//验证额外参数
如果(!isValid){
//你所谓的“拒绝请求”。。。
}
}

首先向方法添加一个附加参数。这使您可以访问有关请求的信息。如果Spring看到这个参数,那么它会提供它

 @PostMapping
 public ResponseEntity<ApiResponse> createContact(HttpServletRequest request, 
 @RequestBody ContactRequest contactRequest) throws IOException {
        boolean isValid = ...// validate for extra parameters
        if(!isValid) {
            // "reject the request" as you call it...
        }
 }

在方法参数列表中添加@RequestParam注释,并将其添加为映射,然后您可以访问它的键列表,并检查它是否包含除所需参数以外的任何其他内容

private boolean reportUnknownParameters(WebRequest webRequest) {
    LongAdder unknownCount = new LongAdder();
    webRequest.getParameterMap().keySet().stream()
      .filter(key -> !knownParameters.contains(key))
      .forEach(key -> {
                 unknownCount.increment();
                 log.trace("unknown request parameter \"{}\"=\"{}\"", key, webRequest.getParameter(key));});
    return unknownCount.longValue() > 0;
}
public ResponseEntity createContact(@RequestParam-Map-requestParams,@RequestBody-ContactRequest-ContactRequest)引发IOException{
//检查requestParams映射键列表,然后相应地传递。
}

要获得最佳实践,请设计一个方法级注释和方法级注释,并根据您的用例给出适当的实现。
@PostMapping()
public ResponseEntity<ApiResponse> createContact(
        @RequestBody ContactRequest contactRequest,
        WebRequest webRequest) throws IOException {

      if (reportUnknownParameters(webRequest) {
          return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
      }
}
private boolean reportUnknownParameters(WebRequest webRequest) {
    LongAdder unknownCount = new LongAdder();
    webRequest.getParameterMap().keySet().stream()
      .filter(key -> !knownParameters.contains(key))
      .forEach(key -> {
                 unknownCount.increment();
                 log.trace("unknown request parameter \"{}\"=\"{}\"", key, webRequest.getParameter(key));});
    return unknownCount.longValue() > 0;
}
public ResponseEntity<ApiResponse> createContact(@RequestParam Map<String,String> requestParams, @RequestBody ContactRequest contactRequest) throws IOException {
//Check for requestParams maps keyList and then pass accordingly.
 }