当前位置: 首页 > 知识库问答 >
问题:

为什么在Grails 2.4.0中将空字符串转换为空字符串传递给域对象的构造函数?

慕凌
2023-03-14
class Todo {

    String name
    Date createdDate
    String priority
    String status

    static constraints = {
        priority blank: true
    }

}
@TestFor(Todo)
class TodoSpec extends Specification {

    void "test persist"() {
        when:
        new Todo(name: 't1', createdDate: new Date(), priority: "1", status: 'ok').save()
        new Todo(name: 't2', createdDate: new Date(), priority: '', status: 'ok').save()

        then:
        Todo.list().size() == 2
    }

}
Todo.list().size() == 2
     |      |      |
     |      1      false
     [collab.todo.Todo : 1]
        at collab.todo.TodoSpec.test persist(TodoSpec.groovy:18)

我在new Todo(名称:'T2',createddate:new Date(),优先级:',status:'OK')行中发现了空字符串'',并通过调试将其转换为null。在google了一段时间后,我看到Grails中有一个特性,可以将web表单中的空字符串转换为空字符串以持久化,可以通过config.groovy中的配置Grails.databinding.convertemptyStringstonull=false禁用该特性。但我不认为斯波克UT是这样的。我试过了,但不像我想的那样有效。

我想知道为什么空字符串被转换为null作为传递给构造函数的参数?提前谢了。

共有1个答案

柯英奕
2023-03-14

它现在有点笨拙,但可以很容易地工作。下面的测试通过Grails 2.3.9...

域类:

// grails-app/domain/com/demo/Person.groovy
package com.demo

class Person {
    String title
}

config.groovy:

// grails-app/conf/Config.groovy
grails.databinding.convertEmptyStringsToNull = false

// ...
// test/unit/com/demo/PersonSpec.groovy
package com.demo

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(Person)
@TestMixin(grails.test.mixin.web.ControllerUnitTestMixin)
class PersonSpec extends Specification {

    void "test empty string conversion"() {
        when:
        def p = new Person(title: '')

        then:
        p.title == ''
    }
}
 类似资料:
  • 问题内容: 我已经编写了一个android程序来将值从Web服务加载到表行。但是值变为null,因此我需要将其转换为字符串。有人可以告诉我这样做的方法吗? 现在从Web服务获取空值,因此我需要将其转换为string 。 LogCat: 问题答案: 用这个,

  • 问题内容: Oracle Java Community网站上的一篇文章提供了以下方法作为示例(对于JPA Converter,但这并不相关): 将String y强制转换为String val有什么用?有正当的理由吗? 原始文章:JPA的新增功能 问题答案: 这样的转换是完全没有必要的。我可以想象那是以前 但是后来参数类型更改为,而作者只是忘了删除强制类型转换。

  • 问题内容: 有什么方法可以将null转换为Integer。null实际上是一个字符串,我在我的服务层中传递该字符串,将其接受为整数。因此,每当我尝试将null字符串强制转换为Integer时,都会引发异常。但是我必须将null转换为Integer。 问题答案: 您 不能 从String强制转换为Integer。但是,如果您尝试将字符串转换为整数,并且必须提供处理字符串的实现,请查看以下代码片段:

  • 我想从属性转换空字符串值,并在API响应模型对象中用替换它。 我尝试了这个解决方案,但它在类级别上不起作用。

  • 我在Kotlin中使用Gson将对象转换为json字符串。 var json2可以返回正确的结果,但是var json1返回null,为什么?

  • 如果我有 我去拿 <代码>空 有没有一种优雅的方法可以将其更改为空字符串? 我可以做: 上下文是我将生成以下表单的字符串: 字符串myString=a“\n”b“\n”c 但我想知道是否有更好的解决方案。