在Spring MVC中,Rest Controller方法将List作为JSON数组转换为单个对象:
{
["TestValue"]
}
但我的要求是,它应该转换为
{"TestValue"}
因此,只要list包含单个值,JSON序列化程序就应该将列表转换为JSON对象而不是JSON数组。
有关在Spring4 MVC中配置Jackson的任何建议吗?
由于 -trim
答案 0 :(得分:0)
如果您想使用自己的协议,可以从Spring Controller的方法返回String。我给你写了一个小例子。我使用“jackson-jaxrs-json-provider”进行映射。你可以创建自己的转换bean的函数。这很容易。
例如,您有一个班级:
public class MyBean {
private String name;
private String value;
private List<MyBean> beanList = new ArrayList<>();
public MyBean(String name, String value, MyBean previous) {
this.name = name;
this.value = value;
if (previous != null)
this.beanList.add(previous);
}
//getters & setters
}
您创建简单的转换功能:
public static String convertToMyJson(Object value) {
try {
ObjectMapper mapper = new ObjectMapper();
String resultList = mapper.writeValueAsString(value);
resultList = "{" + resultList.replaceAll("(^\\[)|(\\]$)", "") + "}";
System.out.println(resultList);
}
catch(Exception e) {
e.printStackTrace(System.err);
}
return "";
}
最后,您只需在Spring MVC Controller中返回简单字符串:
@RequestMapping(path = "get-bean", method = RequestMethod.GET)
public String getBean() {
MyBean bean1 = new MyBean("name1", "11", null);
MyBean bean2 = new MyBean("name2", "22", bean1);
List<MyBean> beanList = new ArrayList<>();
beanList.add(bean1);
beanList.add(bean2);
return convertToMyJson(beanList);
}
你会得到类似的东西:
{
{
"name":"name1",
"value":"11",
"beanList":[
]
},
{
"name":"name2",
"value":"22",
"beanList":[
{
"name":"name1",
"value":"11",
"beanList":[
]
}
]
}
}
答案 1 :(得分:0)
如果您知道列表包含单个对象,则可以序列化列表的第一个元素而不是整个列表。
但是如果你的列表可以包含任意数量的对象(零,一,多),那么以不同方式处理单元素列表的情况可能是个坏主意。如果你这样做,那么接收JSON的客户端/服务现在必须处理两种不同的形状&#34; JSON。这使得它变得更加复杂......最小的实际利益 1 。
1 - 寻找&#34;整洁&#34;这不是一个实实在在的好处。保存2个字符不太可能产生显着差异。