美文网首页
springboot 前台传复杂对象,controller接收并

springboot 前台传复杂对象,controller接收并

作者: 江Kevin | 来源:发表于2017-07-13 02:38 被阅读0次

一番测试后,得到如下几条经验:

  • 方法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

相关文章

网友评论

      本文标题:springboot 前台传复杂对象,controller接收并

      本文链接:https://www.haomeiwen.com/subject/gnwihxtx.html