2017-07-26 46 views
1

我在Spring Boot应用程序的JUnit测试中使用ObjectMapper时遇到了问题。如何在JUnitTests中使用ObjectMapper - 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映射说明。 这是因为@JsonPropertyRepository类没有考虑。你知道如何解决它吗? 在控制器中,一切都很好。

restTemplate.getForObject(repoUrlBuilder(owner,repository_name),Repository.class); 

回答

0

(这是解释从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; 
} 
相关问题