我有一个用于REST通信的spring-MVC。这是控制器:
@RestController
@RequestMapping("/db")
public class RestController {
@Inject
private EmpRepositoryImpl empRepository;
@RequestMapping(value = "/{tableName}.json", method = RequestMethod.GET, produces = "application/json")
public String getTableRecords( @PathVariable String tableName){
List<Map<String, Object>> resultList = empRepository.getAllEmpRecords(tableName);
return resultList.toString();
}
}
我在firefox中得到的结果是:
There was an error parsing the JSON document. The document may not be well-formed.
expected property name or '}' at line 1 column 3
[{nodeID=0, neo_eb_id=11, neo_eb_bossID=11, neo_eb_name='Smith'}, {nodeID=1, neo_eb_id=12, neo_eb_bossID=11, neo_eb_name='Johnson'}, {nodeID=2, neo_eb_id=13, neo_eb_bossID=11, neo_eb_name='Roberts'}, {nodeID=3, neo_eb_id=14, neo_eb_bossID=13, neo_eb_name='Doe'}]
春天生成的这种JSON格式有什么问题?
如何在JSON中显示此结果,该结果可以用缩进的方式显示在eyecandy语法中,并在我用firefox打开的其他json中显示内容?
答案 0 :(得分:1)
将其更改为
@RestController
@RequestMapping("/db")
public class RestController {
@Inject
private EmpRepositoryImpl empRepository;
@RequestMapping(value = "/{tableName}.json", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public List<Map<String, Object>> getTableRecords( @PathVariable String tableName){
return empRepository.getAllEmpRecords(tableName);
}
}
假设您正在使用spring 3.2.x,spring将自动注册能够将处理程序方法返回的值转换为有效JSON的MappingJackson2HttpMessageConverter
。此转换器支持application/json
,并且将由spring自动创建和注册,除非Jackson不在类路径上(可能您必须手动将Jackson添加到类路径中)。只要您没有任何高级要求,Spring的默认Jackson配置就足够了并且运行良好。
此外,通过使用此方法(@ResponseBody并返回模型本身,而不是特定表示),您可以基于例如Accept标头获得使用不同转换器(例如,用于XML)的能力,而无需更改你的控制器。您只需要在Spring配置中添加其他转换器。
这种方法的一个非常重要的好处是......你有可测试的代码!
答案 1 :(得分:-1)
{nodeID=0, neo_eb_id=11, neo_eb_bossID=11, neo_eb_name='Smith'}
是不正确的JSON语法。它应该是{nodeID:0, neo_eb_id:11, neo_eb_bossID:11, neo_eb_name:'Smith'}
(:
而不是=
来分隔字段名称和值)。更好的版本是{ "nodeID"= 0, "neo_eb_id"= 11, "neo_eb_bossID"= 11, "neo_eb_name"= "Smith" }
。
尝试在http://jsonlint.com验证您的JSON以查找特定问题。