Grails 3.x中withFormat的默认格式

Grails 3.x中withFormat的默认格式,grails,grails-3.3,Grails,Grails 3.3,在Grails中,这可用于内容协商,尤其适用于实现API: withFormat { xml { ... some code that renders XML } json { ... some code that renders JSON } } 现在,如果我需要一种默认格式,比如JSON,“…呈现JSON的代码”应该执行两次,一次用于JSON选项,一次用于“*”选项,即“任何其他匹配格式”,这是一种指定默认格式的方法,如: withFormat { xml { ..

在Grails中,这可用于内容协商,尤其适用于实现API:

withFormat {
    xml { ... some code that renders XML }
    json { ... some code that renders JSON }
}
现在,如果我需要一种默认格式,比如JSON,“…呈现JSON的代码”应该执行两次,一次用于JSON选项,一次用于“*”选项,即“任何其他匹配格式”,这是一种指定默认格式的方法,如:

withFormat {
    xml { ... some code that renders XML }
    json { ... some code that renders JSON }
    "*" { ... some code that renders JSON }
}
我的问题是:

  • 这是将默认格式指定为JSON的正确方法吗

  • 有没有办法不为两个选项重复相同的代码?(我的意思是:json,“*”{…}

  • 而不是这个

    withFormat {
        xml { ... some code that renders XML }
        json { ... some code that renders JSON }
        "*" { ... some code that renders JSON }
    }
    
    使用以下命令:

    withFormat {
        xml { ... some code that renders XML }
        "*" { ... some code that renders JSON }
    }
    

    这其中的一个问题是,它是高度冗余的,必须在每个控制器方法中完成。建议将此功能移动到HandlerInterceptor或使用类似

    的东西。感谢您的评论,但没有回答问题。您没有尝试该框架。它会根据API请求自动格式化。如果您调用JSON,它为JSON自动格式化,等等。你不必费心在每个控制器方法中重复编码。尽管我确信OCI的一些Grails开发人员认为糟糕的OOP是一种好的做法。问题是如何在Grails中做到这一点,我认为这是可能的,因为Jeff正确地回答了这一点,所以没有框架或插件eded。不管怎样,答案都没有说明如何做被问到的事情,这就是为什么这个答案不正确并且缺乏上下文。你用来做这件事的功能是一个插件。Grails 3将功能分离到插件中。所以是的……你使用的是一个插件,实际上有几个。看看你的build.gradle文件。Beapi框架只是混淆了,s简化和自动化,这样就不会出现这样的错误。Jeff用他对API的知识尽其所能地回答;这并不是最好的答案。只是可用的答案。我知道这是一个插件,不需要推…该插件是现成的…如果你还没有注意到的话:我不想添加任何外部的东西a、 谢谢你的评论,选择了最好的答案,这是由提出问题的人选择的,那就是我。再次感谢你,请停止争论。这是我意识到我是多么盲目的时刻之一,我认为我需要明确地把每种格式,然后是“其余”,如此简单……谢谢杰夫,你在这里总是帮了大忙。