Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 泽西岛2.13+;Bean验证_Spring_Bean Validation_Jersey 2.0 - Fatal编程技术网

Spring 泽西岛2.13+;Bean验证

Spring 泽西岛2.13+;Bean验证,spring,bean-validation,jersey-2.0,Spring,Bean Validation,Jersey 2.0,我正在使用gradle和以下LIB: ext.library['jersey'] = "org.glassfish.jersey:project:2.13" ext.library['jersey_jettison'] = "org.glassfish.jersey.media:jersey-media-json-jettison:2.13" ext.library['jersey_jackson'] = "org.glassfish.jersey.media:jersey-media-json

我正在使用gradle和以下LIB:

ext.library['jersey'] = "org.glassfish.jersey:project:2.13"
ext.library['jersey_jettison'] = "org.glassfish.jersey.media:jersey-media-json-jettison:2.13"
ext.library['jersey_jackson'] = "org.glassfish.jersey.media:jersey-media-json-jackson1:2.13"
ext.library['jersey_spring'] = "org.glassfish.jersey.ext:jersey-spring3:2.13"
ext.library['jersey_bean_validation'] = "org.glassfish.jersey.ext:jersey-bean-validation:2.13"
我创建了bean验证结构,但它根本没有验证。没有错误消息,什么也没有。这是我创建的结构:

DTO

public class MergeSchedulesDto {

@NotNull(message = "validation.invalid.mergeFrom")
private Long mergeFrom;

@NotNull(message = "validation.invalid.mergeTo")
@NotEmpty(message = "validation.invalid.mergeTo")
private List<Long> mergeTo;
公共类MergeSchedulesDto{
@NotNull(message=“validation.invalid.mergeFrom”)
私人长期合并;
@NotNull(message=“validation.invalid.mergeTo”)
@NotEmpty(message=“validation.invalid.mergeTo”)
私有列表合并到;
服务

@Path("merge")
@POST
@Consumes({ MediaType.APPLICATION_JSON })
public Response merge(@Valid MergeSchedulesDto dto, @QueryParam("units") List<Long> units) {
@Path(“合并”)
@职位
@使用({MediaType.APPLICATION_JSON})
公共响应合并(@Valid MergeSchedulesDto,@QueryParam(“单位”)列出单位){
配置

public class ApplicationJAXRS extends Application {

    public ApplicationJAXRS() {
    }

    @Override
    public Map<String, Object> getProperties() {
        Map<String, Object> properties = new HashMap<>();
        properties
                .put("jersey.config.server.provider.packages",
                        "com.sifionsolution.sig.academic.resource.service,com.sifionsolution.sig.integration.resource.filter,com.sifionsolution.sig.academic.param.converter,com.sifionsolution.sig.datatables.resource.service,com.sifionsolution.sig.datatables.converter");

        return properties;
    }

    @Override
    public Set<Object> getSingletons() {
        Set<Object> singletons = new HashSet<>();

        singletons.add(new Jackson1Feature());
        singletons.add(new ValidationExceptionMapper());

        return singletons;
    }
}
公共类应用程序JAXRS扩展应用程序{
公共应用程序jaxrs(){
}
@凌驾
公共映射getProperties(){
映射属性=新的HashMap();
性质
.put(“jersey.config.server.provider.packages”,
“com.sifionsolution.sig.academical.resource.service,com.sifionsolution.sig.integration.resource.filter,com.sifionsolution.sig.academic.param.converter,com.sifionsolution.sig.datatables.resource.service,com.sifionsolution.sig.datatables.converter”);
归还财产;
}
@凌驾
公共集getSingleton(){
Set singleton=newhashset();
添加(新Jackson1Feature());
添加(新的ValidationExceptionMapper());
返回单身人士;
}
}
编辑我忘记了提供商:

@Provider
public class ValidationExceptionMapper implements ExceptionMapper<ConstraintViolationException> {

    @Override
    public Response toResponse(ConstraintViolationException exception) {
        return Response.status(BAD_REQUEST).entity(exception.getMessage()).build();
    }

}
@Provider
公共类ValidationExceptionMapper实现ExceptionMapper{
@凌驾
公众对响应的响应(ConstraintViolationException){
返回Response.status(请求错误).entity(exception.getMessage()).build();
}
}
编辑2:我删除了JUnit测试,因为我没有使用Jersey测试框架进行测试。 这里的问题是没有调用ValidationExceptionMapper。

将“@Valid”放在您的中,如下所示:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response insert(@Valid T obj) throws Exception{
...
}

这在这里起作用。

您自己在调用该方法。您希望得到什么?调用需要由Jersey运行时进行,它会截取调用并进行验证。在您的测试中,调用不会通过Jersey。我建议您使用进行集成测试,以查看验证是否生效。同时请记住,您的单元我们不依赖于bean的验证。该方法已经假设bean是有效的,所以通过测试就通过了一个有效的bean。好吧,这让我觉得很愚蠢。我将调整我的问题:)