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对象.
代码是 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 上是否有任何方法可以执行类似的操作,而无需编写我的所有字段(使用某种循环)?
如果没有任何默认方法可供使用,我如何迭代类中的所有字段?
我想将此自定义标头添加到我的其余 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 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) 我有一个带有此架构的 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) 我想在我的 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 …
groovy ×5
grails ×3
gcloud ×1
go ×1
gradle ×1
grails-orm ×1
java ×1
list ×1
postgresql ×1
random ×1
spock ×1
spring-boot ×1
testing ×1