Spring Data REST:自定义方法验证

Spring Data REST:自定义方法验证,第1张

Spring Data REST:自定义方法验证

似乎在这种情况下没有好的解决方案,并且

@Valid
默认情况下不以任何方式支持注释,请参阅DATAREST-593。因此,为了支持方法上的
@Valid
注释
@RepositoryRestController
,我创建了以下
@ControllerAdvice
类:

package com.tivoli.api.application.advice;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.core.MethodParameter;import org.springframework.http.HttpInputMessage;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.validation.BeanPropertyBindingResult;import org.springframework.validation.BindingResult;import org.springframework.validation.ObjectError;import org.springframework.validation.Validator;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter;import javax.validation.Valid;import javax.validation.ValidationException;import java.lang.annotation.Annotation;import java.lang.reflect.Type;@ControllerAdvicepublic class RequestBodyValidationProcessor extends RequestBodyAdviceAdapter {    private final Validator validator;    public RequestBodyValidationProcessor(@Autowired final Validator validator) {        this.validator = validator;    }    @Override    public boolean supports(final MethodParameter methodParameter, final Type targetType, final Class<? extends HttpMessageConverter<?>> converterType) {        final Annotation[] parameterAnnotations = methodParameter.getParameterAnnotations();        for (final Annotation annotation : parameterAnnotations) { if (annotation.annotationType().equals(Valid.class)) {     return true; }        }        return false;    }    @Override    public Object afterBodyRead(final Object body, final HttpInputMessage inputMessage, final MethodParameter parameter, final Type targetType, final Class<? extends HttpMessageConverter<?>> converterType) {        final Object obj = super.afterBodyRead(body, inputMessage, parameter, targetType, converterType);        final BindingResult bindingResult = new BeanPropertyBindingResult(obj, obj.getClass().getCanonicalName());        validator.validate(obj, bindingResult);        if (bindingResult.hasErrors()) { throw new ValidationException(createErrorMessage(bindingResult));        }        return obj;    }    private String createErrorMessage(final BindingResult bindingResult) {        final StringBuilder stringBuilder = new StringBuilder("Invalid parameters specified.");        if (bindingResult.getFieldErrors() != null && !bindingResult.getFieldErrors().isEmpty()) { stringBuilder.append(" Fields:"); bindingResult.getFieldErrors().forEach(fieldError -> stringBuilder         .append(" [ ")         .append(fieldError.getField())         .append(" : ")         .append(fieldError.getRejectedValue())         .append(" ] "));        } else if (bindingResult.getAllErrors() != null && !bindingResult.getAllErrors().isEmpty()) { final ObjectError objectError = bindingResult.getAllErrors().get(0); // get the first error stringBuilder.append(" Message: ")         .append(objectError.getDefaultMessage());        }        return stringBuilder.toString();    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5441949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存