spring基于java config的支持方法级别的参数校验

来源:互联网 发布:棕色牛津鞋搭配 知乎 编辑:程序博客网 时间:2024/06/16 00:42

在写api接口的时候,经常需要对参数做一些基本的校验判断,如果手动处理的话,不免太过繁琐,基于hibernate下的validator jar可以满足我们的需求。其为我们提供的很多注解校验像@NotEmpty、@NotNull、@NotBlank等等。对于大多数咱们写的接口,可能接收参数并没有用VO来接收,只是单纯的字符串,也是用的最多的。所以我们需要基于接口方法上进行注解参数空校验。

现在spring官方建议使用java配置来做我们开发,所以以下是让上述注解配置在spring4.x中生效,配置很简单:

首先在spring中创建:

@Beanpublic MethodValidationPostProcessor mvp(){return new MethodValidationPostProcessor();}
MethodValidationPostProcessor 的bean;

其次在需要使用注解的web曾层类级别级别上添加注解:@Validated,来告诉MethodValidationPostProcessor当前CLss的bean需要开启方法级别的验证支持;

最后添加拦截400异常方法获取message消息,封装成你的通用API返回格式。

例:

import com.droilaw.robot.common.ApiResult;import org.hibernate.validator.constraints.NotBlank;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;/** * Created by lancer Song on 2017-06-08. */@RequestMapping("/demo")@Validatedpublic class Demo {    @RequestMapping(value = "",method = RequestMethod.GET)    public ApiResult<String> testValid(@NotBlank(message = "param1参数不能为空") String param1,                                       @NotBlank(message = "param2参数不能为空") String param2){        return ApiResult.success();    }}

通用异常捕获类:

/** * Created by lancer Song on 2017-03-31. * 统一捕获异常类 */@ControllerAdvice@ResponseBodypublic class BaseExceptionHandler {    private static final Logger logger = LoggerFactory.getLogger(BaseExceptionHandler.class);    /**     * 400 - Bad Request     * @param e     * @return     */    @ResponseStatus(HttpStatus.BAD_REQUEST)    @ExceptionHandler(ConstraintViolationException.class)    public ApiResult handleServiceException(ConstraintViolationException e) {        logger.error("错误的请求参数", e);        Set<ConstraintViolation<?>> violations = e.getConstraintViolations();        ConstraintViolation<?> violation = violations.iterator().next();        String message = violation.getMessage();        return ApiResult.fail("parameter:" + message);    }}


可以减少很多手动重复的空校验,便于开发。





阅读全文
2 0
原创粉丝点击