Проблема с BeanValidation

Я пытаюсь следовать примеру в https://jersey.java.net/documentation/latest/bean-validation.html, esp. раздел 18.4.3. Я хочу запретить json, где отсутствует Foo.number. Но мой тест возвращает статус 200. Вот полный текст моего теста (у меня есть артефакт проверки качества джерси-боба в моем pom):

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Response;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.Test;

import static org.junit.Assert.assertTrue;


public class DeleteMe extends JerseyTest {
    @Path("/")
    public static class Resource {
        @POST
        @Produces("application/json")
        public Foo post(@Valid Foo foo) {
            return foo;
        }
    }
    public static class Foo {
       @NotNull
       private Integer number;

       public void setNumber(final Integer number) {
         this.number = number;
       }
       public Integer getNumber() {
         return number;
       }
    }
    @Override
    protected Application configure() {
        return new ResourceConfig(Resource.class)
                .register(JacksonFeature.class);
    }

    @Override
    protected void configureClient(final ClientConfig config) {
        config.register(JacksonFeature.class);
    }
    @Test
    public void testEntityFail() throws Exception {
        Foo foo = new Foo();
        Response response = target().request().post(javax.ws.rs.client.Entity.json(foo));
       //I get 200 here...but foo is no good
        assertTrue("Status "+response.getStatus(),response.getStatus() == 400);
     }
}

1 ответ

PEBKAC - я оставлю этот вопрос на тот случай, если кто-то начинает проверку и нуждается в тесте "Hello World"

Другие вопросы по тегам