小编Bla*_*erg的帖子

Groovy方法从列表中获取随机元素

Groovy是非常强大的管理集合.我有一个像这样的列表:

def nameList = ["Jon", "Mike", "Alexia"]
Run Code Online (Sandbox Code Playgroud)

我要做的是迭代10次以从第一个列表中获得具有随机名称的10个人.

10.times{
    Person person = new Person(
    name: nameList.get() //I WANT TO GET A RANDOM NAME FROM THE LIST
    )
}
Run Code Online (Sandbox Code Playgroud)

这不是出于两个显而易见的原因,我没有在我的nameList.get中添加任何索引,而且我没有创建10个不同的Person对象.

  1. 如何使用groovy从名单中获取随机元素?
  2. 我可以使用groovy的集合属性创建一个包含10个随机名称的人的列表(以简单的方式)吗?

random grails groovy list

7
推荐指数
1
解决办法
6019
查看次数

如何“合并”同一类的两个对象

代码是 Groovy,但答案可以是两者,Groovy 或 Java。我有一个包含以下字段的 Person 类:

class Person(){
String name
String lasName
}
Run Code Online (Sandbox Code Playgroud)

我有一个方法从同一个类返回两个对象。一个对象包含一些字段,另一个对象包含其余字段,在我的示例中,它会是这样的:

person1 = "name : Jon"
person2 = "lastName : Snow"
Run Code Online (Sandbox Code Playgroud)

我需要的是用该字段替换所有空字段(person1如果person2该字段不为空),在我们的示例中,输出将是:

person1.merge(person2)
person1= "name : Jon, lastName : Snow"
Run Code Online (Sandbox Code Playgroud)

Java 或 Groovy 上是否有任何方法可以执行类似的操作,而无需编写我的所有字段(使用某种循环)?

如果没有任何默认方法可供使用,我如何迭代类中的所有字段?

java groovy

5
推荐指数
1
解决办法
1万
查看次数

在 grails 3 拦截器中的每个请求上添加一个响应头

我想将此自定义标头添加到我的其余 API 上的每个响应中:

"customHeader": "foo"
Run Code Online (Sandbox Code Playgroud)

为此,我创建了一个匹配每个控制器的 grails 拦截器,并允许我修改请求。

class FooInterceptor {

    FooInterceptor() {
        matchAll()
    }

    boolean before() { true }

    boolean after() {
        header 'customHeader', "foo" //first try
        response.addHeader 'customHeader', "foo" //second try to do the same
        response.setHeader 'customHeader', "foo" //third try, setHeader doesn't work either
        true
    }

    void afterView() {
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经调试了,可以看到控制器响应后调用了after方法:

respond([status:dodes.OK], [:])
Run Code Online (Sandbox Code Playgroud)

我可以清楚地看到我的拦截器被调用并且 addHader 没有抛出任何异常,但我的标头没有添加到最终响应中。

我的猜测是,也许圣杯的响应方法以某种方式“锁定”了响应,因此无法在之后添加标头,但我不确定。

如何使用拦截器向 grails 3 上的每个响应添加标头?

grails groovy

5
推荐指数
1
解决办法
648
查看次数

使用grails“ POSTGRESQL-EXTENSIONS” json类型时出现休眠错误

我有一个grails 3.3.10应用程序,该数据库具有一个postgresql数据库和一个具有postgresql json类型的表,因此我正在使用POSTGRESQL-EXTENSIONS在我的域中创建json类型,但是当我尝试定义json字段时会引发异常。 到目前为止,这是我所做的

我在build.gradle中添加了冬眠和PostgreSQL依赖项:

classpath "org.grails.plugins:hibernate5:${gormVersion-".RELEASE"}
compile "org.hibernate:hibernate-core:5.1.16.Final"
compile "org.hibernate:hibernate-ehcache:5.1.1.Final"

runtime 'org.postgresql:postgresql:42.2.6.jre7'
compile 'org.grails.plugins:postgresql-extensions:6.1.0'
Run Code Online (Sandbox Code Playgroud)

我在runtime.groovy上添加了自定义方言:

dataSource {
    //the rest of the database config and credentials are skipped here
    dialect = 'net.kaleidos.hibernate.PostgresqlExtensionsDialect'
    }
Run Code Online (Sandbox Code Playgroud)

而且我还修改了我的application.groovy中的seq生成行为:

grails.gorm.default.mapping = {
        id generator: 'org.hibernate.id.enhanced.SequenceStyleGenerator', params: [prefer_sequence_per_entity: true]
}
Run Code Online (Sandbox Code Playgroud)

在这一点上,我的gradle构建工作正常,但是当我向域类中添加自定义json类型时:

导入net.kaleidos.hibernate.usertype.JsonMapType

class classWithJson {

    Map jsonField
    static constraints = {
    }
    static mapping = {
        data type: JsonMapType
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,该构建引发了Exception,因此看来我不能使用json自定义类型。stackTrace是这个:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'methodValidationPostProcessor' defined in class …
Run Code Online (Sandbox Code Playgroud)

postgresql grails groovy grails-orm

4
推荐指数
1
解决办法
79
查看次数

将 bigquery 的行与 null 映射到结构后出现异常

我有一个带有此架构的 BigQuery 表:

name    STRING  NULLABLE     
age     INTEGER NULLABLE  
amount  INTEGER NULLABLE
Run Code Online (Sandbox Code Playgroud)

和这两行:

1   Batgirl 23  123  
2   Batman  22  null     
Run Code Online (Sandbox Code Playgroud)

我想要做的是从这张桌子上的 Go 中选择一个,它工作得很好:

ctx := context.Background()
client, err := bigquery.NewClient(ctx, projectID)

q := client.Query("SELECT * FROM test.user_test LIMIT 1000")

it, err := q.Read(ctx)
if err != nil {
    log.Fatal(err)
}
for {
    var values []bigquery.Value
    err := it.Next(&values)
    if err == iterator.Done {
        break
    }
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(values)
}
Run Code Online (Sandbox Code Playgroud)

上面的代码就像一个魅力一样工作,它获取选择并像这样打印两行:

[Batman 22 <nil>]
[Batgirl …
Run Code Online (Sandbox Code Playgroud)

go google-bigquery gcloud

3
推荐指数
1
解决办法
2322
查看次数

如何使用 gradle 6+ 和 java 11+ 在 spring boot 中配置 spock

我想在我的 spring-boot 项目中使用 spock(使用 groovy,而不是 java)。我有一些 spock 项目已经在 java 8 和更低版本的 gradle 中工作,但我找不到有关最新版本的文档。

这是我的旧 build.gradle

    buildscript {
    ext {
        springBootVersion = '2.1.0.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'groovy'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    implementation('org.springframework.boot:spring-boot-starter-data-mongodb')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.codehaus.groovy:groovy')
    testImplementation('org.springframework.boot:spring-boot-starter-test')

    testCompile(
            'junit:junit:4.12',
            'org.codehaus.groovy:groovy-all:2.4.4',
            'org.spockframework:spock-core:1.2-groovy-2.4',
            'cglib:cglib:2.2',
            'org.spockframework:spock-spring:1.2-groovy-2.4',
    )
}
Run Code Online (Sandbox Code Playgroud)

这有效,我可以创建 spock 测试,但是当我使用 java 11 和 gradle 6.4 创建项目时,没有任何效果(gradle …

testing groovy gradle spock spring-boot

3
推荐指数
1
解决办法
3131
查看次数