gpt4 book ai didi

json - Grails 3 响应方法不使用定义的 JSON 编码器格式

转载 作者:行者123 更新时间:2023-12-02 13:46:37 25 4
gpt4 key购买 nike

我目前使用为每个资源定义自定义 API 响应

JSON.registerObjectMarshaller(Something) { ... }

BootStrap 内部 init关闭。

使用 render something as JSON给我所需的输出。根据编码器设置过滤掉域类的某些属性。

但是,当我使用 时回复 方法,它不使用编码器格式,而是显示域类的所有属性。

Is there any way to make respond use the desired output set up by the marshaller?



Grails 版本:3.2.8

更新:

使用 时似乎出现问题rest-api 轮廓。

最佳答案

当您使用 profile:rest-api 创建 grails 应用程序时会发生此问题。
更准确地说,问题是由 2 个条件引起的:

  • 在 build.gradle 中应用插件:“org.grails.plugins.views-json”。
  • View /对象/_object.gson 存在

  • 如果你深入研究“回应”,你会发现:
    renderer = registry.findRenderer(mimeType, value)
    此时,渲染器(Renderer)实例的具体类取决于上述条件是否满足。
  • 如果满足以上条件=> grails.plugin.json.renderer.JsonViewJsonRenderer
  • 否则 => org.grails.plugins.web.rest.render.json.DefaultJsonRenderer

  • (如果您为某个类定义了自定义 json 渲染器类,则该渲染器可能会在此处返回。自定义 json 渲染器与自定义 marshaller 完全不同,因此请忽略此处的大小写。)
    当 renderer == DefaultJsonRenderer 时,渲染逻辑最终变为:
    DefaultJsonRenderer.groovy:
    protected void renderJson(T object, RenderContext context) {
    JSON converter
    if (namedConfiguration) {
    JSON.use(namedConfiguration) {
    converter = object as JSON
    }
    } else {
    converter = object as JSON
    }
    renderJson(converter, context)
    }
    因此,这会导致与“render --- as JSON”相同的结果。
    另一方面,当 renderer == JsonViewJsonRenderer 时,
    它不是指由 JSON.registerObjectMarshaller 创建的自定义注册编码器,而是指gson View 。
    因此,如果您想启用自定义编码器并保留 gson View 功能,
    快速解决方案是删除_object.gson。
    如果你去掉了views-json插件,那么没有人可以在应用中实现gson View ,这可能会给以后带来不便。

    关于json - Grails 3 响应方法不使用定义的 JSON 编码器格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43357469/

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