gpt4 book ai didi

grails - 如何创建 Grails HAL 转换器

转载 作者:行者123 更新时间:2023-12-02 15:05:58 24 4
gpt4 key购买 nike

我知道有一个 HalJsonRenderer 但我想知道是否有办法拥有类似 JSON 转换器的东西以便能够执行以下操作:

render MyObject as HAL

那个“as”运算符……它是如何工作的?

最佳答案

render ... as JSON 发生了什么更清楚了。如果您添加可选括号:

render(foo as JSON)

render 方法有一些重载,其中一个接受 JSON,所以棘手的部分是 foo as JSON .

Groovy 通过将每个运算符与实际完成工作的方法配对,可以直接重载运算符。 ==运算符通过调用 equals 来实现方法(或 compareTo 如果类实现了 Comparable<< 运算符调用 leftShift 等。 This archived page 有一个很好的运算符表及其相应的方法(Groovy 站点最近进行了重大检修,此页面似乎在洗牌中迷失了)。
as从技术上讲,它不是运算符,但它的处理方式类似。如果添加 asType方法,它将被调用以使类有机会将自己转换为请求的类型:
Object asType(Class c) { ... }

Grails 的接线方式 as JSONas XML相当复杂,但重要的部分涉及添加 asType方法到所有 Controller (除了 renderredirectgetParams (以及相应的 params 属性)等)然后此方法执行到 JSON 或 XML 的转换,或执行传统的强制转换/转换如果目标类不是 JSON 或 XML。

我认为直接支持它比直接支持它更值得,所以如果是我,我会在服务中创建一个方法,将支持的类型转换为 HAL 并呈现它,比如
class SomeService {
String asHal(foo) {
...
}
}

然后你可以从你的 Controller 调用它:
class SomeController {

def someService

def anAction() {
...
def foo = ...
render someService.asHal(foo)
}
}

这不如 render as HAL 方便。 ,但这并没有更多的工作,并且具有不那么神奇的好处。

支持 render foo as HAL您需要添加 asType任何类的方法 foo是,或者做一些类似于 Grails 对 JSON 和 XML 所做的事情。添加 asType方法可能是不切实际的,特别是如果你想支持多种类型,如果这些类型是预先存在的类,比如 ArrayList。您可以实现 org.codehaus.groovy.grails.web.converters.Converter像 JSON 和 XML 类那样的接口(interface)(查看支持代码,您实际上需要扩展 org.codehaus.groovy.grails.web.converters.AbstractConverter ),并创建相关的支持类来进行转换(这一切都被设计为可扩展的,虽然我不我想我见过有人这样做)。这将是有趣的,并且可能是一次很好的学习体验,但正如我所说 - 考虑到更直接的实现是多么简单,工作量远远超过它的值(value)。

关于grails - 如何创建 Grails HAL 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29347135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com