RestEasy 3.x 系列:使用Hibernate_Validator進行數據校驗

使用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>

6.利用PostMan工具測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章