如何在 JUnitTests 中使用 ObjectMapper - Spring Boot 应用程序
Posted
技术标签:
【中文标题】如何在 JUnitTests 中使用 ObjectMapper - Spring Boot 应用程序【英文标题】:How to use ObjectMapper in JUnitTests - Spring Boot app 【发布时间】:2018-01-02 08:50:16 【问题描述】:我在 Spring Boot 应用程序的 JUnit 测试中使用 ObjectMapper 时遇到问题。
杰克逊映射 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 映射。
那是因为Repository
类中的@JsonProperty
没有被考虑在内。你知道如何解决吗?
在控制器中,一切正常。
restTemplate.getForObject(repoUrlBuilder(owner,repository_name),Repository.class);
【问题讨论】:
【参考方案1】:(转述自this answer over here)。
仅当您使用不同的属性并适当地委托时,这才有效。使用您的代码,Jackson 会为同一属性找到两个名称并选择一个:可能是 setter 方法上的名称,因为控制器中的解组对您有用。
您需要两个名称不同但值相同的属性。例如:
@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;
【讨论】:
以上是关于如何在 JUnitTests 中使用 ObjectMapper - Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Typescript 中输入 Object.entries() 和 Object.fromEntries?
如何使用提供程序将 List<object> 存储在 sharedpreferences 中?
如何在 Activity 中使用 Room 和 LiveData 删除 LiveData<Object>?