spring结合javax validation对参数进行验证,并并捕获异常封装成JSON返回.

我们定义一个实体类import javax.validation.constraints.Min; import javax.validation.constraints.Pattern; public class ORDER_INFO {    &n...

我们定义一个实体类

import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;

public class ORDER_INFO {
    @Pattern(regexp="^[A-Za-z0-9_-]{1,20}$",message="订单号格式不正确")
    private  String out_trade_no;
    
    @Min(value=0,message="订单金额不能是负数")
      private  long total_fee;  
}

在上面的实体里当中 我们定义了两个参数:订单号out_trade_no o和 金额total_fee

在订单号里我们使用了正则表达式标记订单必须为1-20位的字母、数字、中划线或下划线。否则提示“订单号格式不正确”。


下面我们来编写Controller来接受参数并验证

@PostMapping("/create")
public MessagePack createPay(@Validated ORDER_INFO order_info,BindingResult bindingResult ){
	  if(bindingResult.hasErrors()){
		  throw new RuntimeException(bindingResult.getFieldError().getDefaultMessage());
		}
	MessagePack pack = new MessagePack();
	pack.setCode(0);
	pack.setMessage("ok");
	return pack;
}

这个方法里,我们接受POST请求,并且将参数和ORDER_INFO校验

第二个参数bindingResult里会给包含校验结果,我们进行判断,并获取第一条错误消息装入异常里抛出。


那这时如果直接抛出异常,前端页面会出现500错误页面。这不是我们想要的,我们想要的是

{"code":-1,"message":"订单号格式不正确","object":null,"status":"PLAT_ERROR"}

所以我们需要对异常进行捕获处理。

这里我们就需要写一个全局异常捕获处理类。

@RestControllerAdvice
public class ExceptionHandler {
	public static final String PLAT_ERROR = "PLAT_ERROR";
	
	@org.springframework.web.bind.annotation.ExceptionHandler(Exception.class)
	public MessagePack handler(Exception ex){
		MessagePack pack = new MessagePack();
		pack.setCode(MessagePack.ERROR);
		pack.setMessage(ex.getMessage());
		pack.setStatus(PLAT_ERROR);
		return pack;
	}
}

这里的操作就是捕获所有Exception异常,并且定义一个MessagePack类进行输出。

这个类很简单。内容如:

public class MessagePack implements java.io.Serializable {
	public static final long OK = 0;

	public static final long ERROR = -1;
	
	private long code;
	// 信息
	private String message;
	// 携带的值
	private Object object;

	private String status;
}


好了大功告成。我们开始测试。

测试地址:

http://localhost:8080/scanBarcodePay/create?out_trade_no=&total_fee=1

我们直接给一个空的字符串给out_trade_no。很明显,这个并不满足之前的正则表达式。所以后端返回的就是:

image.png

  • 发表于 2018-04-30 10:25
  • 阅读 ( 1629 )
  • 分类:J2EE框架

条评论

请先 登录 后评论
不写代码的码农
三叔

422 篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除