Я использую Java 8 с Dropwizard 0.7.
Я не могу получить подтверждение для работы с моими ресурсами в Dropwizard
У меня есть следующий боб
@Data //lombok anntation
@JsonRootName(value="CreateNewGame")
@XmlRootElement
public class CreateNewGameDTO {
@NotEmpty
public String name;
@NotNull
private GameType type;
@NotBlank
private String username;
@NotNull
@Min(1)
private Integer numOfPlayers;
}
И в моем классе ресурсов у меня есть следующий метод
@POST
@Timed
public Response createGame(@Valid CreateNewGameDTO dto) { ... }
My JUnit test
@ClassRule
public static final DropwizardAppRule<CivBoardGameRandomizerConfiguration> RULE =
new DropwizardAppRule<CivBoardGameRandomizerConfiguration>(CivBoardgameRandomizerApplication.class, "src/main/resources/config.yml");
@Test
public void createGameShouldFailBecauseOfMissingUsername() throws Exception {
List<NewCookie> cookies = performLogin();
assertThat(cookies.size()).isEqualTo(2);
Client client = Client.create();
CreateNewGameDTO dto = new CreateNewGameDTO();
dto.setNumOfPlayers(4);
dto.setUsername(null); //Username NULL, so it should throw exception
dto.setName("PBF WaW");
dto.setType(GameType.WAW);
ObjectMapper mapper = new ObjectMapper();
String dtoAsJSon = mapper.writeValueAsString(dto);
URI uri = UriBuilder.fromPath(String.format(BASE_URL + "/game", RULE.getLocalPort())).build();
ClientResponse response = client.resource(uri)
.type(MediaType.APPLICATION_JSON)
.cookie(cookies.get(0))
.cookie(cookies.get(1))
.entity(dtoAsJSon)
.post(ClientResponse.class);
assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED_201);
URI location = response.getLocation();
assertTrue(location.getPath().matches(".*civilization/game/.*"));
}
Когда я создаю модульный тест для вызова этого ресурса, я получаю следующее исключение
ERROR [2014-10-01 11:03:39,515] com.sun.jersey.spi.container.ContainerResponse: A message body writer for Java class io.dropwizard.jersey.validation.ValidationErrorMessage, and Java type class io.dropwizard.jersey.validation.ValidationErrorMessage, and MIME media type application/xml was not found.
The registered message body writers compatible with the MIME media type are:
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider
application/xml ->
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$App
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$App
Я ничего не делал, чтобы "зарегистрировать" валидацию. Я думал, что dropwizard делает это автоматически. В документации тоже ничего не нашел. Я использую версию Dropwizard 0.7.