如何定义允许json输入并将其映射到JsonSlurper的ReST端点

如何定义允许json输入并将其映射到JsonSlurper的ReST端点,json,angularjs,rest,groovy,restangular,Json,Angularjs,Rest,Groovy,Restangular,我想使用Spring4.0和Groovy编写一个API ReST端点,@RequestBody参数可以是任何通用的JSON输入,它将被映射到Groovy JsonSlurper,这样我就可以通过slurper简单地访问数据 这里的好处是,我可以向端点发送各种JSON文档,而不必为可能发送的每种格式定义DTO对象 目前,我的方法如下所示,并且有效: @RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = Med

我想使用Spring4.0和Groovy编写一个API ReST端点,@RequestBody参数可以是任何通用的JSON输入,它将被映射到Groovy JsonSlurper,这样我就可以通过slurper简单地访问数据

这里的好处是,我可以向端点发送各种JSON文档,而不必为可能发送的每种格式定义DTO对象

目前,我的方法如下所示,并且有效:

@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<String> putTest(@RequestBody ExampleDTO dto) {

    def json = new groovy.json.JsonBuilder()
    json(
            id: dto.id,
            name: dto.name
    );

    return new ResponseEntity(json.content, HttpStatus.OK);
}
我最初认为我可以只接受一个字符串而不是ExampleDTO,然后将该字符串弄混,但后来我在AngularJS客户机中遇到了很多问题,试图将JSON对象作为字符串发送到API端点。我遇到了一个恼人的需求,需要避开所有的双引号,并用双引号包围整个JSON字符串。然后,如果我的数据中有引号或各种特殊字符,我就会遇到问题。这似乎不是一个干净可靠的解决方案

我愿意接受任何可以将AngularJSON对象干净地转换为有效字符串的方法,或者我可以在ReST方法中执行的任何允许JSON输入而无需将其映射到特定对象的方法

提前谢谢


托尼亚

angular.toJsonobj,[pretty];不适合你吗?pretty是一个布尔值,用于维护空格和换行符,将数据作为纯JSON发送到API端点。如果我的端点需要一个字符串,则SpringREST会以400错误拒绝该字符串,请求在语法上不正确。我不能让我的端点期望JSON,除非我提供一些字段与JSON数据匹配的类;这样Spring就可以将JSON代码转换成对象了。您是否考虑过只使用@RequestBody Map dto来消除JsonSlurping?我喜欢,并且想要JSON slurping。将要传入的结构太复杂,无法用映射表示,而不会导致不必要的代码复杂性。
def json = new JsonSlurper().parseText(input);
String exampleName = json.name;