关于传参为HttpServletRequest request时,如何转为对应的实体类数据,且进行注解非空判断等@Validated。可通过Validator进行实体类的注解判断。

首先,该需求就是前端穿过来的数据为HttpServletRequest类时,就不能进行@Validated判断了,所以,想对其进行判断得分二步,

其一,先将其转化为对应的实体类,

其二,通validator.validate()对其进行实体类中的注解判断。

代码:

    public AjaxResult submit(HttpServletRequest request)
    {
        //此为将request转为String类,再将其转为实体类。
        String body = DataConvertUtil.getRequestBody(request);
        OkbApplyInfo okbApplyInfo = JSONUtil.toBean(body, OkbApplyInfo.class);

        //这里是进行注解判断
        ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
        Validator validator = vf.getValidator();
        //若有不通过的属性值则存入set中
        Set<ConstraintViolation<OkbApplyInfo>> set = validator.validate(okbApplyInfo);
        if(set.size() > 0) {
            for (ConstraintViolation<OkbApplyInfo> constraintViolation : set) {
                return AjaxResult.error(constraintViolation.getMessage());
            }
        }
}

其中有一个getRequestBody方法将request转为string类型。

    /**
     *  request转string
     * @param request
     * @return
     */
    public static String getRequestBody(HttpServletRequest request) {
        StringBuilder builder = new StringBuilder();
        InputStream inputStream = null;
        try {
            inputStream = request.getInputStream();
            byte[] bytes = new byte[4096];
            for(int n; (n=inputStream.read(bytes)) != -1;) {
                builder.append(new String(bytes, 0, n));
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            if(inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return builder.toString();
    }


版权声明:本文为qq_48964306原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。