我想在数据库列中存储一个包含有效JSON的字符串。 通过@RepositoryRestResource完成访问。因此,如果我想更改列的值,则请求将采用JSON格式,包括列名和新值。我想使用MockMvc为这种情况编写一个测试用例,将PATCH请求发送到端点并等待响应。
我试图用引号将转义部分转义
起初,我有一个方法可以构建JSON请求正文:
private String tableConfig() {
return "{\n" +
"\"tableConfig\" : " + "\"[\n"
+ "\"listOfProperties\" : [\n"
+ "\"aBooleanProperty\" : true,\n"
+ "\"anIntProperty\" : 5,\n"
+ "\"aStringProperty\" : \"stringValue\""
+ "]"
+ "]\"" +
"}";
}
接下来是测试案例:
@Test
public void testUpdateTableConfig() throws Exception {
mockMvc.perform(
patch("http://localhost/api/usersettings/" + myEntity.getId())
.contentType(MediaType.APPLICATION_JSON_UTF8)
.characterEncoding("UTF-8")
.content(tableConfig())
)
.andExpect(status().isNoContent())
.andReturn();
}
我希望不会收到任何内容回复。相反,我收到一个400 Bad请求,因此我假设Spring尝试将字符串内的JSON值映射到对象树或类似的对象。 有没有办法传递包含JSON作为值的JSON请求,并通过Spring Data Rest将原始JSON数据获取为String?
编辑:根据要求添加了网址
答案 0 :(得分:1)
Json无效。 实际的表配置值为
{
"tableConfig" : "[
"listOfProperties" : [
"aBooleanProperty" : true,
"anIntProperty" : 5,
"aStringProperty" : "stringValue"]]"}
我认为应该像下面的
{
"tableConfig":[
{
"listOfProperties":{
"aBooleanProperty":true,
"anIntProperty":5,
"aStringProperty":"stringValue"
}
}
]
}
或
{
"tableConfig":{
"listOfProperties":{
"aBooleanProperty":true,
"anIntProperty":5,
"aStringProperty":"stringValue"
}
}
}
您可以在在线json验证器上对其进行验证。
我建议使用Json库Gson或Jackson。