Spring MVC,验证请求是否有重复的参数

问题描述 投票:0回答:2

我们将多部分发布请求映射到下面的方法。

fun post(@RequestParam(value = "photo", required = true) photo: Array<MultipartFile>,
         @Valid person: Person)

class Person {
  int id,
  String name
}

在下面的示例中,请求中有多个name参数

localhost:8080/api
post body:
id:101
name: Jhon
name: Jhonny

如果请求包含重复的参数,是否有办法拒绝该请求?

spring spring-mvc kotlin interceptor
2个回答
0
投票

您可以将HttpServletRequest添加到处理程序方法参数列表中,对其进行验证,如果存在多个相同参数,则返回ReponseEntity.badRequest().build()

@GetMapping
public ResponseEntity handlerMethod(HttpServletRequest request) {

    if (request.getParameterValues("name").length > 1) {
        return ResponseEntity.badRequest().build();
    }

    return ResponseEntity.ok().build();
}

如果要在整个应用程序中执行此操作,可以定义过滤器:

@Component
class DuplicateRequestParameterFilter extends OncePerRequestFilter {

    Enumeration<String> parameters = request.getHeaderNames();
    while (parameters.hasMoreElements()) {
        if (request.getParameterValues(parameters.nextElement()).length > 1) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        }
    }

    filterChain.doFilter(request, response);
}

0
投票

不,会有一个名为'name'的数组或一个包含两个名字的字符串,它看起来像这个{id:101,name:'Jhon,Jhonny'}{id:101,name:['Jhon','Jhonny']},如果name是一个字符串,它是由如何接收它决定的,结果将是'Jhon,Jhonny' 。如果name是一个字符串数组,结果将是['Jhon','Jhonny']。

© www.soinside.com 2019 - 2024. All rights reserved.