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

时间:2018-09-14 06:00:03

标签: spring spring-mvc kotlin interceptor

我们已将多部分帖子请求映射到以下方法。

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

如果请求包含重复的参数,是否可以拒绝该请求?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

否,将存在一个名为“名称”的数组或包含两个名称的字符串,看起来像这样 {id:101,name:'Jhon,Jhonny'}{id:101,name:['Jhon','Jhonny']} 由接收方式决定 如果name是一个字符串,则结果为'Jhon,Jhonny'。 如果name是一个字符串数组,则结果为['Jhon','Jhonny']。