简体   繁体   English

球衣2.13 + Bean验证

[英]Jersey 2.13 + Bean Validation

I'm using gradle and the following libs: 我正在使用gradle和以下库:

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"

I created the bean validation structure, but its not validating at all. 我创建了bean验证结构,但是它根本没有验证。 No error messages, nothing. 没有错误信息,什么都没有。 This is the structure I've created: 这是我创建的结构:

The DTO 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;

The Service 服务

@Path("merge")
@POST
@Consumes({ MediaType.APPLICATION_JSON })
public Response merge(@Valid MergeSchedulesDto dto, @QueryParam("units") List<Long> units) {

The config 配置

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;
    }
}

EDIT I forgot the provider: 编辑我忘记了提供者:

@Provider
public class ValidationExceptionMapper implements ExceptionMapper<ConstraintViolationException> {

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

}

EDIT 2: I removed the JUnit test because I didnt test using Jersey Test Framework. 编辑2:我删除了JUnit测试,因为我没有使用Jersey测试框架进行测试。 The problem here is that the ValidationExceptionMapper is not beeing called. 这里的问题是ValidationExceptionMapper没有被调用。

Put "@Valid" in your, like this: 输入“ @Valid”,如下所示:

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

This works here. 这在这里有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM