【发布时间】:2018-07-12 12:26:30
【问题描述】:
我正在尝试测试 POST,但无论我做什么,我都会收到 java.lang.AssertionError: Content type not set
我的控制器:
@RestController
@RequestMapping("/artistas")
public class ArtistaEndpoint {
private final ArtistaService artistaService;
private final ArtistaMapper artistaMapper;
private final AlbumService albumService;
@CrossOrigin(origins = "http://localhost:8080")
@PostMapping
public ResponseEntity<Void> post(@Valid @RequestBody Artista artista) {
artista = artistaService.save(artista);
ArtistaDto artistaDto = artistaMapper.toDtoCompleto(artista);
URI uri = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(artistaDto.getId()).toUri();
if(!artista.getAlbuns().isEmpty()) {
Set<Album> albuns = artista.getAlbuns();
for(Album album: albuns) {
album.setArtista(artista);
albumService.save(album);
}
}
return ResponseEntity.created(uri).build();
}
}
和我的测试:
@Test
public void salvarArtistaSemAlbum() throws Exception {
Artista adicionado = new Artista();
adicionado.setId(1L);
adicionado.setNome("Banda Eva");
adicionado.setDescricao("Viva o carnaval");
when(artistaService.save(Mockito.any(Artista.class))).thenReturn(adicionado);
mockMvc.perform(MockMvcRequestBuilders.post("/artistas")
.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
.accept(MediaType.APPLICATION_JSON_UTF8_VALUE)and
.content(TestUtil.asJsonString(adicionado)))
.andExpect(status().isCreated())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
.andExpect(jsonPath("$.id", is(1)))
.andExpect(jsonPath("$.nome", is("Banda Eva")))
.andExpect(jsonPath("$.descricao", is("Viva o carnaval")));
verify(artistaService, times(1)).save(Mockito.any(Artista.class));
verifyNoMoreInteractions(artistaService);
assertNull(adicionado.getId());
assertThat(adicionado.getNome(), is("Banda Eva"));
assertThat(adicionado.getDescricao(), is("Viva o carnaval"));
}
以及httpservlet的响应:
MockHttpServletResponse:
Status = 201
Error message = null
Headers = {Location=[http://localhost/artistas/1]}
Content type = null
Body =
Forwarded URL = null
Redirected URL = http://localhost/artistas/1
Cookies = []
我已经做了一个问题,但错误是另一个问题,我可以解决。我不明白为什么它返回 201 created 并且没有内容正文。闻起来像一些我没有的注释,但我已经复习了,但没有成功。 对我的英语感到抱歉,感谢您的帮助。
编辑-
我以为问题解决了,但我错了
【问题讨论】:
-
为什么要返回带有内容的正文?你正在返回
Voidaka,什么都没有......没有什么可以返回,也没有什么没有内容类型。所以要么显式设置内容类型,要么实际设置正文。
标签: java spring spring-mvc junit spring-test