我无法找到解决该问题的方法...... 基本上我想测试一些产生json响应的休息资源,json以安全字符串为前缀,例如:
"qwerty{"status":"success"}"
当然使用前缀这不是有效的json,因此json路径失败:
mockMvc.perform(get("/myresource")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("$.status").value("success"))
出现以下错误:
java.lang.IllegalArgumentException:无效的容器对象 at com.jayway.jsonpath.JsonPath.read(JsonPath.java:180)at com.jayway.jsonpath.JsonPath.read(JsonPath.java:211)at org.springframework.test.util.JsonPathExpectationsHelper.evaluateJsonPath(JsonPathExpectationsHelper.java:98) 在 org.springframework.test.util.JsonPathExpectationsHelper.assertValue(JsonPathExpectationsHelper.java:115) 在 org.springframework.test.web.servlet.result.JsonPathResultMatchers $ 2.match(JsonPathResultMatchers.java:68) 在 org.springframework.test.web.servlet.MockMvc $ 1.andExpect(MockMvc.java:152)
有没有办法跳过给定的前缀并让jsonpath正常工作?也许是全球配置?
编辑以澄清这种情况,前缀是在jackson http消息转换器中声明的:
@Bean
public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON));
converter.setPrefixJson(true);
converter.setJsonPrefix("qwerty");
return converter;
}
修改 here指向相关jira问题的链接