Почему mockMvc возвращает 400 если передавать json с полем указанным в @JsonIdentityInfo?
При использовании аннотации @JsonIdentityInfo с параметрами, как указано в примере, если в mockMvc.perform(put()) передавать json с полем "id" то возвращается http-статус 400, а не 200. При обычном же, не тестовом вызове, все работает корректно, возвращается 200. Причем ошибка возникает до входа в метод контроллера, т.е. мой программный код не выполняется. Как можно решить это?
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class CardOrderDTO {
private int id;
private String client;
}
@WebMvcTest(CardOrderController.class)
class CardOrderControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private CardOrderService cardOrderService;
@SpyBean
private ModelMapper ModelMapper;
@SneakyThrows
@Test
public void givenCardOrderDTO_whenUpdateCardOrder_thenReturnOk(){
// given
var cardOrderDTO = CardOrderDTO.builder()
.id(1)
.client("Client1")
.build();
given(cardOrderService.findById(anyInt()))
.willReturn(Optional.of(new CardOrder()));
// when
var response = mockMvc.perform(put("/card-order")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(cardOrderDTO)));
// then
response.andExpect(status().isOk());
}
}