微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Groovy Builder转换真的有效吗?

如何解决Groovy Builder转换真的有效吗?

plugins {
    id 'groovy'
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 11

repositories {
    mavenCentral()
}

dependencies {

    implementation 'org.codehaus.groovy:groovy-all:2.4.15'
    testCompile group: 'junit',name: 'junit',version: '4.12'
    testImplementation ('org.spockframework:spock-core:1.1-groovy-2.4') {
        exclude group: 'org.codehaus.groovy'
    }
}

我尝试在以下代码中使用Builder转换:

package pattern

import groovy.transform.builder.Builder
import groovy.transform.builder.DefaultStrategy

@Builder
class HttpRequestBuilderAnnotation {

    //Mandatory
    private final String url
    private final String httpMethod
    private final String requestContentType
    private final String acceptContentType

    //Optional
    private final String requestBody
    private final List<Integer> validResponseCodes

    String getUrl() {
        return url
    }

    String getHttpMethod() {
        return httpMethod
    }

    String getRequestContentType() {
        return requestContentType
    }

    String getAcceptContentType() {
        return acceptContentType
    }

    String getRequestBody() {
        return requestBody
    }

    List<Integer> getValidResponseCodes() {
        return validResponseCodes
    }
}

测试案例:

package pattern

import spock.lang.Specification

class HttpRequestBuilderAnnotationSpec extends Specification {

    private String url = 'https://dsd.com'

    void "Instantiate HttpRequest"() {

        when:
        HttpRequestBuilderAnnotation httpRequestBuilderAnnotation = HttpRequestBuilderAnnotation.builder()
                                                                    .url(url).build()

        then:
        assert httpRequestBuilderAnnotation
        assert httpRequestBuilderAnnotation.getUrl() == url
    }
}

错误

groovy.lang.MissingMethodException: No signature of method: static pattern.HttpRequestBuilderAnnotation.url() is applicable for argument types: (java.lang.String) values: [https://dsd.com]
Possible solutions: use([Ljava.lang.Object;),grep(),dump(),any(),getUrl(),use(java.lang.class,groovy.lang.Closure)

    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at pattern.HttpRequestBuilderAnnotationSpec.Instantiate HttpRequest(HttpRequestBuilderAnnotationSpec.groovy:12)

----------注意: 如果删除了“专用”修饰符,则代码可以正常工作,但我相信按照Groovy规范,专用修饰符应按原样工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。