gpt4 book ai didi

json - Grails - JSONBuilder - 规范 toPrettyString() 返回 stackoverflow

转载 作者:行者123 更新时间:2023-12-01 08:41:05 24 4
gpt4 key购买 nike

我正在做一个需要返回 JSON 的单元测试。为了构建它,我使用了 JSONBuilder 中的 toPrettyString() 方法。

这是要规范的类:

class Lugar {
String sigla
String nombre
Coordenada coordenada

String toString(){
"${sigla}"
}

String toJson()
{
new JsonBuilder( this ).toPrettyString()
}

static constraints = {
nombre blank: false , nullable: false
}
}

要运行的规范是这样的:

@TestFor(Lugar)
class LugarSpec extends Specification {

void "toJson not empty"() {

when:
Lugar lugar = new Lugar(sigla: "BUE", nombre:"BUENOS AIRES")
String aux = lugar.toJson();

then:
! aux.dump().empty
}
}

但结果是:

 <error type="java.lang.StackOverflowError">java.lang.StackOverflowError
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
at groovy.lang.MetaBeanProperty.getProperty(MetaBeanProperty.java:60)
at groovy.lang.PropertyValue.getValue(PropertyValue.java:40)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:287)
at groovy.json.JsonOutput.writeMap(JsonOutput.java:421)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:291)
at groovy.json.JsonOutput.writeArray(JsonOutput.java:326)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:283)
at groovy.json.JsonOutput.writeMap(JsonOutput.java:421)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:291)
at groovy.json.JsonOutput.writeArray(JsonOutput.java:326)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:283)
at groovy.json.JsonOutput.writeMap(JsonOutput.java:421)
at groovy.json.JsonOutput.writeObject(JsonOutput.java:291)

它会一直重复直到结束。

我尝试在一个 main 上测试 toJson,结果很好:

static void main(String[] args) {
Lugar lugar = new Lugar(sigla: "BUE", nombre:"BUENOS AIRES")

String aux = lugar.toJson();

println aux.dump()
}

结果是:

{
"sigla": "BUE",
"constraints": {
"nombre": {
"blank": false,
"nullable": false
}
},
"nombre": "BUENOS AIRES"
}

最佳答案

我不会让对象本身负责格式化它的内容。首先,您可能会查看 @ToString 注释,它允许您指定要包含在结果中的字段。

http://docs.groovy-lang.org/latest/html/gapi/groovy/transform/ToString.html

其次,我会删除 toJson 方法,让默认的 json 转换器处理它。就像是println new JsonBuilder( object ).toPrettyString()

见: Groovy - Convert object to JSON string

关于json - Grails - JSONBuilder - 规范 toPrettyString() 返回 stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538248/

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