feat[litemall-core]: 支持排序校验。
This commit is contained in:
@@ -1,12 +1,20 @@
|
||||
package org.linlinjava.litemall.core.config;
|
||||
|
||||
import org.hibernate.validator.internal.engine.path.PathImpl;
|
||||
import org.linlinjava.litemall.core.util.ResponseUtil;
|
||||
import org.springframework.http.converter.HttpMessageNotReadableException;
|
||||
import org.springframework.web.bind.MissingServletRequestParameterException;
|
||||
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
|
||||
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.validation.ValidationException;
|
||||
import java.util.Set;
|
||||
|
||||
@ControllerAdvice
|
||||
public class GlobalExceptionHandler {
|
||||
|
||||
@@ -18,6 +26,13 @@ public class GlobalExceptionHandler {
|
||||
return ResponseUtil.badArgumentValue();
|
||||
}
|
||||
|
||||
@ExceptionHandler(MissingServletRequestParameterException.class)
|
||||
@ResponseBody
|
||||
public Object argumentHandler(MissingServletRequestParameterException e){
|
||||
e.printStackTrace();
|
||||
return ResponseUtil.badArgumentValue();
|
||||
}
|
||||
|
||||
@ExceptionHandler(HttpMessageNotReadableException.class)
|
||||
@ResponseBody
|
||||
public Object httpMessageNotReadableHandler(HttpMessageNotReadableException e){
|
||||
@@ -25,6 +40,21 @@ public class GlobalExceptionHandler {
|
||||
return ResponseUtil.badArgumentValue();
|
||||
}
|
||||
|
||||
@ExceptionHandler(ValidationException.class)
|
||||
@ResponseBody
|
||||
public Object handle(ValidationException e) {
|
||||
e.printStackTrace();
|
||||
if(e instanceof ConstraintViolationException){
|
||||
ConstraintViolationException exs = (ConstraintViolationException) e;
|
||||
Set<ConstraintViolation<?>> violations = exs.getConstraintViolations();
|
||||
for (ConstraintViolation<?> item : violations) {
|
||||
String message = ((PathImpl)item.getPropertyPath()).getLeafNode().getName() +item.getMessage();
|
||||
return ResponseUtil.fail(402, message);
|
||||
}
|
||||
}
|
||||
return ResponseUtil.badArgumentValue();
|
||||
}
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
@ResponseBody
|
||||
public Object exceptionHandler(Exception e){
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.linlinjava.litemall.core.config;
|
||||
|
||||
import org.hibernate.validator.HibernateValidator;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import javax.validation.Validation;
|
||||
import javax.validation.Validator;
|
||||
import javax.validation.ValidatorFactory;
|
||||
|
||||
@Configuration
|
||||
public class ValidatorConfiguration {
|
||||
@Bean
|
||||
public Validator validator(){
|
||||
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
|
||||
.configure()
|
||||
.addProperty( "hibernate.validator.fail_fast", "true" )
|
||||
.buildValidatorFactory();
|
||||
Validator validator = validatorFactory.getValidator();
|
||||
|
||||
return validator;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.linlinjava.litemall.core.validator;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
@Target({ METHOD, FIELD, PARAMETER })
|
||||
@Retention(RUNTIME)
|
||||
@Documented
|
||||
@Constraint(validatedBy = OrderValidator.class)
|
||||
public @interface Order {
|
||||
String message() default "排序类型不支持";
|
||||
String[] accepts() default {"desc", "asc"};
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.linlinjava.litemall.core.validator;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class OrderValidator implements ConstraintValidator<Order, String>{
|
||||
private List<String> valueList;
|
||||
|
||||
@Override
|
||||
public void initialize(Order order) {
|
||||
valueList = new ArrayList<String>();
|
||||
for(String val : order.accepts()) {
|
||||
valueList.add(val.toUpperCase());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
|
||||
if(!valueList.contains(s.toUpperCase())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package org.linlinjava.litemall.core.validator;
|
||||
|
||||
import javax.validation.Constraint;
|
||||
import javax.validation.Payload;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
|
||||
@Target({ METHOD, FIELD, PARAMETER })
|
||||
@Retention(RUNTIME)
|
||||
@Documented
|
||||
@Constraint(validatedBy = SortValidator.class)
|
||||
public @interface Sort {
|
||||
String message() default "排序字段不支持";
|
||||
String[] accepts() default {"add_time", "id"};
|
||||
|
||||
Class<?>[] groups() default {};
|
||||
|
||||
Class<? extends Payload>[] payload() default {};
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.linlinjava.litemall.core.validator;
|
||||
|
||||
import javax.validation.ConstraintValidator;
|
||||
import javax.validation.ConstraintValidatorContext;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SortValidator implements ConstraintValidator<Sort, String>{
|
||||
private List<String> valueList;
|
||||
|
||||
@Override
|
||||
public void initialize(Sort sort) {
|
||||
valueList = new ArrayList<String>();
|
||||
for(String val : sort.accepts()) {
|
||||
valueList.add(val.toUpperCase());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
|
||||
if(!valueList.contains(s.toUpperCase())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user