【问题标题】:@RequestBody, sending in List<String> in POST request@RequestBody,在 POST 请求中发送 List<String>
【发布时间】:2017-08-17 19:39:31
【问题描述】:

我有一个基本的 POJO,其字段如下所示:

@NotEmpty
@ElementCollection
@Column(name = "TAGS")
private List<String> tags;

我正在尝试向以下控制器发送 JSON 格式的 POST 请求:

@RequestMapping(value = "/post", method = RequestMethod.POST)
public void createPost(@RequestBody BlogPost blogPost) {
    blogPostService.addPost(blogPost);
}

我的 JSON:

{
    "stuff": "stuff",
    "stuff": "stuff",
    "tags": [{"Tag 1"}, {"Tag 2"}]
}

基本上我的问题是我不知道如何将其转换为列表。我已经尝试寻找答案,但我没有找到任何东西。这甚至可能吗?

我得到的错误是:

JSON 解析错误:无法从 START_OBJECT 令牌中反序列化 java.lang.String 实例;

【问题讨论】:

  • 数组对象格式错误。

标签: json spring spring-mvc spring-boot


【解决方案1】:
"tags": [{"Tag 1"}, {"Tag 2"}]

对应一个对象数组,而不是应该表示为的字符串数组:

"tags": ["Tag 1", "Tag 2"]

更改客户端以发送字符串数组:"tags": ["Tag 1", "Tag 2"]

否则,请更改客户端和后端以声明一个使用自定义类参数化的列表,该类将包含字符串值。

Json 发送:

"tags": [{"value": "Tag 1"}, {"value": "Tag 2"}]

在后端映射:

private List<MyObject> tags;

MyObject 可以在哪里声明:

public class MyObject{
   private String value;
   ... // getter - setter
}

【讨论】:

  • 哇,是的...正在查看很多人们处理对象的代码,所以我有点忽略了显而易见的事情。非常感谢您抽出宝贵时间回复。
  • 不客气 :) 这是一个简单的问题。很有可能。如果它可以帮助您记住这一点,在 JavaScript 中,var a = { } 创建一个存储在 a 变量中的对象。
【解决方案2】:

您的 pojo 中有字符串列表,但发送对象列表 去掉括号

{
"stuff": "stuff",
"stuff": "stuff",
"tags": ["Tag 1", "Tag 2"]
}

【讨论】:

  • 你的回答也不错。它也值得一票:)
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2021-08-31
  • 2013-05-08
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多