我们将多部分发布请求映射到下面的方法。
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
如果请求包含重复的参数,是否有办法拒绝该请求?
您可以将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);
}
不,会有一个名为'name'的数组或一个包含两个名字的字符串,它看起来像这个{id:101,name:'Jhon,Jhonny'}
或{id:101,name:['Jhon','Jhonny']}
,如果name是一个字符串,它是由如何接收它决定的,结果将是'Jhon,Jhonny' 。如果name是一个字符串数组,结果将是['Jhon','Jhonny']。