将JSON字符串作为值传递给Spring数据REST端点

时间:2019-07-09 08:38:14

标签: json spring spring-data-rest

我想在数据库列中存储一个包含有效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?

编辑:根据要求添加了网址

1 个答案:

答案 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。