У меня есть простой веб-контроллер для возврата сущности User.
У этой сущности есть свойство nonEditableProperty
, которое не может быть обновлено.
Он отлично работает на веб-контроллере, значение nonEditableProperty
указано в списке, но на UserControllerTest
оно не работает, и возвращаемое значение всегда null
.
Аннотация @JsonProperty(access = JsonProperty.Access.READ_ONLY)
, кажется, игнорируется во время сериализации теста.
У кого-нибудь есть подсказки по этой проблеме?
Стоит ли загружать какую-то конфигурацию Джексона для тестов?
@Getter
@Entity
class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
private String nonEditableProperty;
User() {
}
public User(String name, String nonEditableProperty) {
this.name = name;
this.nonEditableProperty = nonEditableProperty;
}
}
@RestController
@AllArgsConstructor
@RequestMapping("users")
public class UserController {
private final UserRepository userRepository;
@GetMapping
public Collection<User> getAllUsers() {
return (Collection<User>) userRepository.findAll();
}
@GetMapping(path = "/{id}")
public User getUser(@PathVariable Integer id) {
return userRepository.findOne(id);
}
}
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerTest {
@Autowired
TestRestTemplate testRestTemplate;
@Test
public void getUserShouldReturnData() {
ResponseEntity<User> response = testRestTemplate.getForEntity("/users/{id}", User.class, 1);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody().getName()).isEqualTo("Muhammed Suiçmez");
assertThat(response.getBody().getNonEditableProperty()).isEqualTo("Non editable property");
}
}