Java SpringMVC:如何在单控制器方法中返回多个JSON以及其他属性?
我正在使用Spring3.2和SpringMVC。Jackson库包含在我的设置中 我有一个页面,在初始加载时,需要为Dojo下拉框填充两个数据源(数据源是JSON格式的字符串)和两个文本框。我假设可以在返回之前将这些字符串作为四个字符串添加到模型中 我找到了很多示例,其中带有@ResponseBody注释的方法的控制器在响应AJAX请求时返回一个JSON,但我找不到任何关于如何处理上述情况的示例(这不是对AJAX请求的响应,包括多个JSON以及简单字符串)Java SpringMVC:如何在单控制器方法中返回多个JSON以及其他属性?,java,json,spring,spring-mvc,marshalling,Java,Json,Spring,Spring Mvc,Marshalling,我正在使用Spring3.2和SpringMVC。Jackson库包含在我的设置中 我有一个页面,在初始加载时,需要为Dojo下拉框填充两个数据源(数据源是JSON格式的字符串)和两个文本框。我假设可以在返回之前将这些字符串作为四个字符串添加到模型中 我找到了很多示例,其中带有@ResponseBody注释的方法的控制器在响应AJAX请求时返回一个JSON,但我找不到任何关于如何处理上述情况的示例(这不是对AJAX请求的响应,包括多个JSON以及简单字符串) 是我返回四个字符串(两个包含JSON
{
dropDown1Data:[...],
dropDown2Data:[...],
textBox1Data:[...], ...
}
在您的问题中,您提到了初始加载时的。您不需要在初始加载时向页面发送json。JSON用于AJAX请求 要在初始加载时填充控件,只需将对象放入模型并在页面上引用它们 比如说,
List blam1 = new ArrayList();
... populate blam1 ...
Model.addAttribute("blam1", blam1);
然后在页面上(本例中为JSP)
找到了解决方案
我找到了问题第二部分(#2)的答案。它源于Jackson的ObjectMapper
的基本用法,即将列表
对象序列化为包含JSON符号的字符串
:
@RequestMapping()
受保护的字符串初始化页(模型){
List states=stateService.getStates();
List towns=townService.getTowns();
ObjectMapper objMapper=新的ObjectMapper();
String statesJson=objMapper.writeValueAsString(states);//尝试|为清晰起见,已删除catch
字符串townsJson=objMapper.writeValueAsString(towns);
addAttribute(“statesJson”,statesJson);
model.addAttribute(“townsJson”,townsJson);
返回“stateTownQueryPage”;
}
尽管如此,我还是承认另一种方法,即构建能够在第一次将页面作为AJAX调用使用时创建的JSON的具体化(就像您在第一次提供页面之后依赖于用户输入的JSON一样)到使用@ResponseBody
注释的控制器方法。这种方法也有其优点。要获得多个输入,请使用以下方法:
@RequestMapping(value = "/....", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public ResponseEntity<RestResponse> functionName(@RequestBody Model model){
//TODO : Your task
return response;
}
@RequestMapping(value=“/…”,method=RequestMethod.POST,products=“application/json”)
@应答器
公共响应属性函数名(@RequestBody Model){
//TODO:你的任务
返回响应;
}
此语句:需要填充两个JSON,没有意义。这些是文本字段、输入还是其他内容?对短语进行了修订,使其更具描述性。我是说两个JSON格式的数据源字符串。。。由Dojo在前端用于填充两个下拉框。根据进一步的研究对问题进行了修订。问题在于如何在两个对象上执行@ResponseBody所做的等效操作(技术上是MappingJackson2HttpMessageConverter的ObjectMapper),并将它们作为字符串存储在模型中。
@RequestMapping()
protected String initPage(Model model) {
List<StateDropDownEntry> states = stateService.getStates();
List<TownDropDownEntry> towns = townService.getTowns();
ObjectMapper objMapper = new ObjectMapper();
String statesJson = objMapper.writeValueAsString(states); // try|catch removed for clarity
String townsJson = objMapper.writeValueAsString(towns);
model.addAttribute("statesJson",statesJson);
model.addAttribute("townsJson",townsJson);
return "stateTownQueryPage";
}
@RequestMapping(value = "/....", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public ResponseEntity<RestResponse> functionName(@RequestBody Model model){
//TODO : Your task
return response;
}