Spring引导验证不适用于所有bean

时间:2015-04-22 10:55:37

标签: java spring-boot

我有一个spring-boot:1.2.3申请,我有2个验证问题:

  • 它适用于@Path端点,但不适用于@Service或@Component类
  • 如果验证失败,它不会抛出或记录任何内容,它只返回400而没有任何其他信息

这些是spring-boot:1.2.3附带的验证库:

[INFO] |  +- org.hibernate:hibernate-validator:jar:5.1.3.Final:compile
[INFO] |  |  +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] |  +- org.glassfish.jersey.ext:jersey-bean-validation:jar:2.14:compile

这些是spring-boot-starter-log4j附带的日志记录库:

[INFO] +- org.springframework.boot:spring-boot-starter-log4j:jar:1.2.2.RELEASE:compile
[INFO] |  +- org.slf4j:slf4j-log4j12:jar:1.7.10:compile
[INFO] |  \- log4j:log4j:jar:1.2.17:compile

此验证有效,但不记录或显示任何堆栈跟踪:

@Component
@Path("/validation-example")
public class ValidationExampleResource {

    @GET
    @Path("/{positiveNumber}")
    public int validationExample(@Min(0) @PathParam("positiveNumber") int positiveNumber) {
        ...
    }
}

但验证在这里根本不起作用:

@Service
public class ValidationExampleServiceImpl implements ValidationExampleService {

    @Override
    public int validationExample(@Min(0) int positiveNumber) {
        ...
    }
}

2 个答案:

答案 0 :(得分:1)

试试这个配置。在我的项目中它奏效了!春季启动:1.5.9.RELEASE

@Slf4j
@Service
@Validated
public class ValidationService {

    @Validated(CreateGroup.class)
    public void create(@Valid User user) {
        log.info("验证服务业务的作用");
    }

    public void basic(@NotNull(message = "名称不能为空") String name) {

    }

}

Details

答案 1 :(得分:0)

为了使验证有效,您需要添加@Valid

@Component
@Path("/validation-example")
public class ValidationExampleResource {

    @GET
    @Path("/{positiveNumber}")
    public int validationExample(@Valid @Min(0) @PathParam("positiveNumber") int positiveNumber) {
        ...
    }
}