Spring MVC:解析JSON文档时出错

时间:2014-11-08 19:16:54

标签: json spring spring-mvc

我有一个用于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'}]
  1. 春天生成的这种JSON格式有什么问题?

  2. 如何在JSON中显示此结果,该结果可以用缩进的方式显示在eyecandy语法中,并在我用firefox打开的其他json中显示内容?

2 个答案:

答案 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以查找特定问题。