版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lazycheerup/article/details/84783620
使用Hibernate_Validator进行数据校验,好处不言而喻:规范统一,低耦合度。
1.pom.xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-validator-provider-11</artifactId>
<version>3.0.9.Final</version>
</dependency>
2.实体
(PS:lombok ---要使用这个对象,必须还要写一些getter和setter方法,可能还要写一个构造器、equals方法、或者hash方法.这些方法很冗长而且没有技术含量,我们叫它样板式代码)
import org.hibernate.validator.constraints.NotBlank;
import lombok.Data;
@Data
public class ApiBankUserDto {
@NotBlank(message = "姓名不为空")
private String name;//姓名
@NotBlank(message = "手机号码不为空")
private String mobile;//手机号码
@NotBlank(message = "短信验证码不为空")
private String emsCode;//短信验证码
@NotBlank(message = "验证密码不为空")
private String pwd;//验证密码
}
3.控制器 (@valid 注解 引用的包为:import javax.validation.Valid)
/**
* 绑定用户信息
*
* @param apiBankUserDto
* @param result
* @return
*/
@POST
@Path("/bindBankUserInfo")
public ApiMsgVo bindBankUserInfo(@Context HttpHeaders headers, @Valid ApiBankUserDto apiBankUserDto) {
WxUserInfoBO wxUserInfoBO = getUserTokenPojo(headers);
if (wxUserInfoBO == null) {
return ApiMsgVo.createError("没有登陆");
}
ApiMsgVo apiMsgVo = apiBankUserService.bindBankUserInfo(apiBankUserDto, wxUserInfoBO.getOpenid());
return apiMsgVo;
}
4.捕获检验异常和message并输出
resteasy框架为api的异常处理,提供了一个统一的接口,ExceptionMapper<Exception>,我们可以定义一个handler来实现这个接口,就可以捕获resteasy api的异常。如下面的代码:
import java.util.HashMap;
import java.util.Map;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import org.jboss.resteasy.api.validation.ResteasyConstraintViolation;
import org.jboss.resteasy.api.validation.ResteasyViolationException;
import com.cebbank.wx.vo.ApiMsgVo;
@Provider
public class ValidationExceptionHandlerREST implements ExceptionMapper<ResteasyViolationException> {
@Override
@Produces("application/json")
public Response toResponse(ResteasyViolationException exception) {
// 获取校验失败的反馈信息
Map<String, String> violations = new HashMap<String, String>();
ApiMsgVo apiMsgVo = ApiMsgVo.createError("请求参数错误");
for (ResteasyConstraintViolation violation : exception.getViolations()) {
violations.put(violation.getPath(), violation.getMessage());
apiMsgVo = ApiMsgVo.createError(violation.getMessage());
}
System.out.print("Violation error");
return Response.status(Status.BAD_REQUEST).entity(apiMsgVo).build();
// return
// Response.status(Status.BAD_REQUEST).entity(violations).build();
}
}
5.配置web.xml
另外我们需要使用此handler,所以我们在web.xml中启用它。如下面的配置:
<context-param>
<param-name>resteasy.providers</param-name>
<param-value>com.ec.resteasy.providers.valid.ValidationExceptionHandlerREST</param-value>
</context-param>