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

Passing JSON String as value to a Spring data REST endpoint

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

编辑:根据要求添加了 URL

Json 无效。 实际 table 配置值是

{
"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。