JSR 303 表单校验(一)
简介
JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
一丶代码
一丶实体类(只需要在实体类上加个注解 ,就能轻松应对各种类型的表单校验)
@NotBlank(message ="品牌名必须提交")
private String name;
二丶控制层 加上 @Valid 注解
@RequestMapping("/save") public R save(@Valid @RequestBody BrandEntity brand){ brandService.save(brand); return R.ok(); }
三丶 Postman测试
结果 :此时拿到 我们自定义的信息
完整返回体
{ "timestamp": "2021-01-21T15:00:43.442+0000", "status": 400, "error": "Bad Request", "errors": [ { "codes": [ "NotBlank.brandEntity.name", "NotBlank.name", "NotBlank.java.lang.String", "NotBlank" ], "arguments": [ { "codes": [ "brandEntity.name", "name" ], "arguments": null, "defaultMessage": "name", "code": "name" } ], "defaultMessage": "品牌名必须提交", "objectName": "brandEntity", "field": "name", "rejectedValue": "", "bindingFailure": false, "code": "NotBlank" } ], "message": "Validation failed for object='brandEntity'. Error count: 1", "path": "/product/brand/save" }
四丶 进阶 :通常接口的返回信息 都是统一 的 ---消息统一返回
@RequestMapping("/save") public R save(@Valid @RequestBody BrandEntity brand, BindingResult result){ if(result.hasErrors()){ //获取校验的错误结果 Map<String,String> map=new HashMap<>(); //FieldError 获取到错误提示 result.getFieldErrors().forEach((items)->{ //获取错误的属性名字 String filed=items.getField(); map.put("filed",filed); }); return R.error(400,"提交的数据不合法").put("data",map); } brandService.save(brand); return R.ok(); }
五丶 Postman测试
六丶附上几个 消息统一返回类
一丶
package com.atguigu.common.utils; import org.apache.http.HttpStatus; import java.util.HashMap; import java.util.Map; /** * 返回数据 **/ public class R extends HashMap<String, Object> { private static final long serialVersionUID = 1L; public R() { put("code", 0); put("msg", "success"); } public static R error() { return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员"); } public static R error(String msg) { return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg); } public static R error(int code, String msg) { R r = new R(); r.put("code", code); r.put("msg", msg); return r; } public static R ok(String msg) { R r = new R(); r.put("msg", msg); return r; } public static R ok(Map<String, Object> map) { R r = new R(); r.putAll(map); return r; } public static R ok() { return new R(); } public R put(String key, Object value) { super.put(key, value); return this; } }
二丶
package com.atguigu.commonutils; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.HashMap; import java.util.Map; /*** * 统一返回结果 */ @Data public class R { @ApiModelProperty(value = "是否成功") private Boolean success; @ApiModelProperty(value = "返回码") private Integer code; @ApiModelProperty(value = "返回消息") private String message; @ApiModelProperty(value = "返回数据") private Map<String, Object> data = new HashMap<String, Object>(); //构造器私有防止外部调用 private R(){} //成功方法 public static R ok(){ R r=new R(); r.setSuccess(true); r.setCode(ResultCode.SUCCESS); r.setMessage("成功"); return r; } //失败方法 public static R error(){ R r=new R(); r.setSuccess(false); r.setCode(ResultCode.ERROR); r.setMessage("失败"); return r; } public R success(Boolean success){ this.setSuccess(success); return this; } public R message(String message){ this.setMessage(message); return this; } public R code(Integer code){ this.setCode(code); return this; } public R data(String key, Object value){ this.data.put(key, value); return this; } public R data(Map<String, Object> map){ this.setData(map); return this; } public Boolean getSuccess() { return success; } public void setSuccess(Boolean success) { this.success = success; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Map<String, Object> getData() { return data; } public void setData(Map<String, Object> data) { this.data = data; } }