一番测试后,得到如下几条经验:
方法1:加上@RequestBody @Valid 绑定生效,校验生效,只有其中一个不行。
接口参数input(参数名称也不影响)的构造函数不影响参数映射和校验方法2:使用自定义的HandlerMethodArgumentResolver。实现如下:
在其中直接通过InputStream来获取请求参数字符串
HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
InputStream is = request.getInputStream();
String jsonParams = IOUtils.toString(is, "UTF-8");
IOUtils.closeQuietly(is);
得到字符串后,利用json工具转成Object对象
ObjectReader objectReader = Jackson2ObjectMapperBuilder.json().build().reader();
JavaType javaType = objectReader.getTypeFactory().constructType(cls);
Object obj = objectReader.forType(javaType).readValue(jsonParams);
然后开始校验
final WebDataBinder binder = webDataBinderFactory.createBinder(nativeWebRequest, obj, cls.getName());
binder.validate(new Object[]{obj});
BindingResult result = binder.getBindingResult();
之后可以对result进行处理,抛异常或者其他操作,最后返回obj