Как использовать ObjectMapper в JUnitTests - приложение Spring Boot
У меня проблема с использованием ObjectMapper в тестах JUnit в приложении Spring Boot.
Джексон картирование POJO:
public Repository() {
@JsonProperty(value="fullName")
public String getFullName() {
return fullName;
}
@JsonProperty(value="full_name")
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@JsonProperty(value = "cloneUrl")
public String getCloneUrl() {
return cloneUrl;
}
@JsonProperty(value = "clone_url")
public void setCloneUrl(String cloneUrl) {
this.cloneUrl = cloneUrl;
}
@JsonProperty(value="stars")
public int getStars() {
return stars;
}
@JsonProperty(value="stargazers_count")
public void setStars(int stars) {
this.stars = stars;
}
...
}
Тесты JUnit:
@Autowired
private ObjectMapper objectMapper;
@Test
public void testWithMockServer() throws Exception{
Repository testRepository = new Repository();
testRepository.setCloneUrl("testUrl");
testRepository.setDescription("testDescription");
testRepository.setFullName("test");
testRepository.setStars(5);
String repoString = objectMapper.writeValueAsString(testRepository);
...
}
После создания строки из testRepository
Я вижу, что не каждое поле настроено - только описание, которое не требует какого-либо дополнительного отображения JsonProperty. Это потому @JsonProperty
от Repository
класс не учитывается. Вы знаете, как это исправить? В контроллере все отлично работает.
restTemplate.getForObject(repoUrlBuilder(owner,repository_name),Repository.class);
1 ответ
(Это перефразировано из этого ответа здесь).
Это работает, только если вы используете разные свойства и делегируете должным образом. С помощью вашего кода Джексон находит два имени для одного и того же свойства и выбирает одно: предположительно, имя методов-установщиков, так как демонтаж в контроллере работает для вас.
Вам нужны два свойства с разными именами, которые имеют одинаковое значение. Например:
@JsonProperty(value="fullName")
public String getFullName() {
return fullName;
}
@JsonProperty(value="full_name")
public void setFull_Name(String fullName) { // Different property name here
this.fullName = fullName;
}