import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Null(message = "新增ID應爲空", groups = InsertAction.class)
@NotNull(message = "更新ID不應爲空", groups = UpdateAction.class)
private Integer userId;
@NotEmpty(message="用戶名1不能爲空")
private String name1;
@NotNull(message="用戶名2不能爲空")
private String name2;
@NotBlank(message="用戶名3不能爲空")
private String name3;
@Email(message="非法郵件地址")
private String email;
@Pattern(regexp="^(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9]|X)$",message="身份證號不合規")
private String cardNo;
@Length(min=1,max=10,message="暱稱長度1必須在1~10")
private String nickName1;
@Size(min=1,max=10,message="暱稱長度2必須在1~10")
private String nickName2;
@Range(min=0,max=2,message="非法性別1")
private String sex1;
@Pattern(regexp="^([012])$",message="非法性別2")
private String sex2;
@Max(value=150,message="非法年齡1")
@Min(value = 0,message = "非法年齡2")
private int age;
@Size(min = 1,message="至少輸入一個愛好")
List<String> hobbies;
@Past
private Date birthDate;
}
public interface InsertAction {
}
public interface UpdateAction {
}
import lombok.Data;
@Data
public class ResponseResult {
private String code;
private String message;
private Object result;
public ResponseResult(Object result) {
this.code = "200";
this.message = "success";
this.result = result;
}
public ResponseResult(String code, String message) {
this.code = code;
this.message = message;
this.result = null;
}
public ResponseResult(String code, String message, Object result) {
this.code = code;
this.message = message;
this.result = result;
}
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseResult validationBodyException(MethodArgumentNotValidException exception){
StringBuffer buffer = new StringBuffer();
BindingResult result = exception.getBindingResult();
if (result.hasErrors()) {
List<ObjectError> errors = result.getAllErrors();
errors.forEach(p ->{
FieldError fieldError = (FieldError) p;
log.error("Data check failure : object{"+fieldError.getObjectName()+"},field{"+fieldError.getField()+
"},errorMessage{"+fieldError.getDefaultMessage()+"}");
buffer.append(fieldError.getDefaultMessage()).append(",");
});
}
ResponseResult response = new ResponseResult("500",buffer.toString().substring(0, buffer.toString().length()-1));
return response;
}
}
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.groups.Default;
@RestController
@RequestMapping("/user/")
public class UserController {
@RequestMapping("testValidation")
public String testValidation(@Valid @RequestBody User user) {
return "success";
}
@PostMapping("add")
public String addValidation(@Validated({InsertAction.class, Default.class}) @RequestBody User user) {
return "success";
}
@PostMapping("update")
public String updateValidation(@Validated({UpdateAction.class, Default.class}) @RequestBody User user) {
return "success";
}
}
server.port=8090
server.servlet.context-path=/validation