json - JSON 的 Grails 2.4 命名配置不起作用

标签 json spring grails groovy

我无法使用指定的命名配置将对象呈现为 JSON。我在做什么错?

我在 Bootstrap.groovy init 方法中定义了一个命名配置

import com.appromocodes.Project
import com.appromocodes.Promocode
import grails.converters.JSON

class BootStrap {

    def init = { servletContext ->


        JSON.createNamedConfig('apiCheck', {
            JSON.registerObjectMarshaller(Promocode) { Promocode promocode ->
                def map= [:]
                map['code'] = promocode.code
                map['allowedUses'] = promocode.allowedUses
                map['customInfo'] = promocode.customInfo

                return map              
              }
        })

    }
    def destroy = {
    }
}

然后我有一个经典的 Controller (不是 REST,而是简单的 Controller ):
import grails.converters.JSON

class ApiV1Controller {

def apiV1Service

    def check() {

        log.info("check");

        def resultMap = apiV1Service.checkPromocode(params.projectKey, params.code)


        if (resultMap.statusCode != ResponseStatus.PROMOCODE_USED) {
        }

        def p = Promocode.get(1)

        JSON.use('apiCheck', {
            render p as JSON
        })

    }

}

我希望检查操作的调用将仅输出 apiCheck 中指定的三个名为 config 的属性,而不是我获得所有 bean 属性以及元类属性“class”和“id”。

如果我不指定命名配置,则 JSON 会正确呈现仅显示三个属性的 bean。

怎么了?是否也可以在非 REST Controller 中使用 namedConfig?

最佳答案

DefaultConverterConfiguration 带有默认配置的 JSON 作为参数传递给闭包。 That configuration has to be used to registerObjectMarshaller .所以闭包必须如下实现(注意闭包的参数)。

JSON.createNamedConfig('apiCheck', { config ->
     config.registerObjectMarshaller(Promocode) { Promocode promocode ->
         def map= [:]
         map['code'] = promocode.code
         map['allowedUses'] = promocode.allowedUses
         map['customInfo'] = promocode.customInfo

         return map              
     }
})

一个更简单、更清晰、更简洁的实现是:
JSON.createNamedConfig( 'apiCheck' ) { 
     it.registerObjectMarshaller( Promocode ) { Promocode promocode ->
         [ 
             code        : promocode.code, 
             allowedUses : promocode.allowedUses,
             customInfo  : promocode.customInfo
         ]
     }
}

关于json - JSON 的 Grails 2.4 命名配置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25573270/

相关文章:

grails - 将spring-security-ui集成到我的grails应用程序中所需的说明

tomcat - URL 中的 Grails Tomcat 根上下文和双斜杠 (//)

javascript - 将 JSON 发布到 WCF REST 端点

php-从数组分页数据

java - 使用 Retrofit 将图像从 Android 上传到 PHP 服务器

java - 防止 WebLogic 服务器上的 XSD 的外部引用

Spring 重试模板不适用于 @org.springframework.transaction.annotation.Transactional

java - 集合的 RestTemplate URI 模板语法?

javascript - 无法通过 JQuery/AJAX 将 POST 数据发送到 JSON 文件,为什么?

grails 在运行 grails generate 命令时抛出异常