具有ArrayList <string>的Java Object将SERIALIZED作为单个String而不是包含一个String的Array获取

时间:2017-03-08 10:53:43

标签: json rest serialization spring-boot deserialization

我有一个带有以下Java类的Spring启动应用程序

class Student{
    int id;
    ArrayList<String> subjectsTaken;
}

我对另一个服务进行REST调用,其中Student的实例作为POST请求中的实体(在正文中)传递。当subjectTaken变量中有多个条目时,每件事都可以正常工作。

当subjectTaken变量中有多个条目时,POST请求中的正文如下

{&#34; ID&#34;:1,&#34; subjectsTaken&#34;:[&#34;科学&#34;&#34;数学&#34;&#34;历史&#34 ]}

其中subjectTaken是一个String数组

但是当subjectTaken变量中只有一个条目时,请求正文如下

{&#34; ID&#34;:1,&#34; subjectsTaken&#34;:&#34;科学&#34;}

其中subjectTaken只是一个String(而不是一个带有一个String的数组)

由于这个原因,反序列化在被调用的REST服务中失败并出现以下错误

无法从VALUE_STRING标记中反序列化java.util.ArrayList的实例。

感谢关于此的任何指示。

2 个答案:

答案 0 :(得分:1)

我想我找到了问题的解决方案。您可以在发生反序列化的被调用服务的application.properties文件中设置此属性。

spring.jackson.deserialization.ACCEPT_SINGLE_VALUE_AS_ARRAY =真

这有助于解决问题。

答案 1 :(得分:0)

我建议创建一个数组,即使它只是一个主题。并将此数组发送到其余控制器。

{&#34; ID&#34;:1,&#34; subjectsTaken&#34;:[&#34;科学&#34;]}