gpt4 book ai didi

grails - 如何在 Grails 2.3.6 中将命名空间 Controller 与相同打包的服务相关联?

转载 作者:行者123 更新时间:2023-12-02 14:42:57 24 4
gpt4 key购买 nike

无论 Controller 中声明的命名空间如何,将服务注入(inject)命名空间 Controller 始终解析为服务的最高版本。

    package com.vertest.v1
class VertestController {
static namespace = 'v1'
def vertestService
def agateSer() {
render vertestService.agate()
}
}
package com.vertest.v1
class VertestService {
def agate() {
this.getClass().getName()
}
}

package com.vertest.v2
class VertestController {
static namespace = 'v2'
def vertestService
def agateSer() {
render vertestService.agate()
}
}
package com.vertest.v2
class VertestService {
def agate() {
this.getClass().getName()
}
}

UrlMappings.groovy
    "/v1/agateservice"(controller:"vertest", action:"agateSer", namespace:"v1")
"/v2/agateservice"(controller:"vertest", action:"agateSer", namespace:"v2")

v1 VertestController 解析为 v2 VertestService:
    http://localhost:8080/worklists/v1/agateservice > com.iii.worklists.v2.VertestService
http://localhost:8080/worklists/v2/agateservice > com.iii.worklists.v2.VertestService

也许有一种方法可以强制 v1 VertestController 使用 v1 VertestService;修改 v1 VertestController 以声明一个完全合格的 VertestService:
    package com.vertest.v1
class VertestController {
static namespace = 'v1'
com.vertest.v1.VertestService vertestService = new com.vertest.v1.VertestService()
def agateSer() {
render vertestService.agate()
}
}

哎哟!编译错误:
    Error creating bean with name 'com.iii.worklists.v1.VertestController': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'com.iii.worklists.v2.VertestService' to required type 'com.iii.worklists.v1.VertestService' for property 'vertestService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.iii.worklists.v2.VertestService] to required type [com.iii.worklists.v1.VertestService] for property 'vertestService': no matching editors or conversion strategy found

将 v1 Controller 与 v1 服务关联的首选方法是什么?

最佳答案

应用程序不支持定义 2 个具有相同名称的服务,即使它们位于不同的包中。这样做的问题是它们都有相同的 bean 名称。当具有相同名称的服务由不同的插件提供时,框架中有一些机制可以处理此问题,但这与在应用程序中定义它们不同,框架不支持。

关于grails - 如何在 Grails 2.3.6 中将命名空间 Controller 与相同打包的服务相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24960308/

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