dubbo Provider端引入@Valid校验不生效
1.检查@Service注解是否开启validation
@Service(validation = "true")
2.SpringMVC配置,引入
<bean id="springValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
</bean>
注意,这里的bean id 不能命名为validator,会报错
aused by: java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean' to required type 'org.apache.tomcat.jdbc.pool.Validator' for property 'validator': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:262)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:590)
... 25 more
3.引入validator jar包
顺便解决掉maven冲突,若存在冲突,可能会报一些奇怪的错误,且找原因比较困难
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.0.Final</version>
</dependency>
4.引入后若产生如下报错
Exception in thread "main" javax.validation.ValidationException: Unable to instantiate Configuration.
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:279)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110)
...
at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:110)
at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:86)
at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41)
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276)
... 2 more
javax.validation.ValidationException: HV000183: Unable to load 'javax.el.ExpressionFactory'
解决方案:引入如下jar包
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
5.使用:
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
@Validated
@Service(validation = "true")
public class OrderImpl implements OrderService {
@Override
public void handleOrder(@Valid OrderDto dto) {
//业务逻辑
}
}