将依赖项添加到
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-stream-binder-servicebus</artifactId>
</dependency>
突然使我的一些RestTemplate客户端测试失败,错误如下:
java.lang.AssertionError: JSON path "$"
Expected: (a collection containing <152> and a collection containing <153>)
but: a collection containing <152> was String "<UnmodifiableRandomAccessList><item>152</item><item>153</item></UnmodifiableRandomAccessList>"
或
Expected :application/json
Actual :application/xml;charset=UTF-8
我的测试看起来像:
@Autowired
private RestTemplate restTemplate;
private MockRestServiceServer mockServer;
@BeforeEach
public void init()
{
mockServer = MockRestServiceServer.createServer(restTemplate);
}
public void test() throws Exception
{
mockServer.expect(requestTo(url))
.andExpect(method(HttpMethod.POST))
.andExpect(jsonPath("$", hasItems(152, 153)))
.andRespond(withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON)
.body("{}")); // actual code removed for brevity
ResultDTO result = client.makeRestCall(Set.of(1L)); // beneath makes a RestTemplate call to the url
assertNotNull(result);
}
奇怪的是,一个测试类中只有一些测试失败了,也就是说,这个类有8个测试,其中4个失败了,没有明显的原因。我看到的是,我删除了Azure依赖项,测试通过了。有没有人知道这种依赖会带来什么,从而破坏我的代码?
1条答案
按热度按时间o8x7eapl1#
这是a known issue。问题是Azure依赖项带来了
jackson-dataformat-xml
依赖项,它破坏了rest控制器响应的格式(使它们成为XML而不是默认的JSON)。解决这个问题的简单方法是排除依赖关系:线程提到依赖项已成为可选的,但我找不到发生这种情况的版本。