Похоже, вы не ищете нужное место для проблемы.
Регистратор выдает сообщение об ошибке с URI запроса /users/1
:
Request URI = /users/1
иваш метод тестирования пытается получить /account/1
:
mockMvc.perform(get("/account/1"))
Что касается самой ошибки, MethodArgumentTypeMismatchException :
Исключение, указывающее, что аргумент методане имеет ожидаемого типа.
Другими словами, метод, аннотированный @GetMapping("/users/{id}")
, имеет неправильный тип параметра @PathVariable
.
В вашем случае выиспользуя UUID в качестве параметра:
public @ResponseBody ResponseEntity<AccountDTO> getAccount(@PathVariable UUID id) {
Однако в своем тесте вы не передаете UUID, вы передаете числовое значение (long / int) в своем тесте.
Если вы хотите сгенерировать случайный UUID, вы можете использовать UUID.randomUUID()
:
@Test
public void getAccount()throws Exception {
mockMvc.perform(get("/account/" + UUID.randomUUID()))
.andDo(print())
.andExpect(status().isOk())
.andExpect(view().name("/account/"));
}
В качестве альтернативы, вы можете использовать long вместо uuid в своем методе отображения:
@GetMapping(value = "/{id}")
@ApiOperation(value = "Retrieve account.")
public @ResponseBody ResponseEntity<AccountDTO> getAccount(@PathVariable Long id) {
return accountService.retreiveById(id).map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.notFound().build());
}
хотя в этом случае вам, вероятно, придется изменить метод AccountService.retrieveById(id)
.
Удачи!