当我尝试使用 a 来解析包含 Java 8 LocalDateTime 的简单域模型对象时json视图 http://docs.grails.org/latest/guide/single.html#whatsNewJSONViews,我收到一个堆栈溢出异常,这似乎与 GSON 实现不了解 Java 8 LocalDateTime 这一事实有关。
这是一个例子(grails 视图和 JSON 的文档 http://views.grails.org/latest/#_introduction):
域类“Person”
import java.time.LocalDate
class Person
{
Sting name
LocalDate birthDate
}
人员控制器
class PersonController
{
def index() {
respond Person.findAll() as List<Person>
}
}
索引.gson视图
@Field List<Person> personList
json tmpl.person(personList)
_person.gson 模板文件
model
{
Person person
}
json g.parse(person)
当我尝试打开此视图时,抛出堆栈溢出异常:
导致:grails.views.ViewRenderException:渲染视图时出错:
无效的
在 grails.views.AbstractWritableScript.writeTo(AbstractWritableScript.groovy:43)
在 grails.plugin.json.view.api.internal.DefaultGrailsJsonViewHelper$6.writeTo(DefaultGrailsJsonViewHelper.groovy:677)
当我将 _person.gson 简化为:
...
json
{
name person.name
}
该视图按预期工作。
我的问题是
是否有默认方法来处理 Grails JSON 视图中的 Java 8 LocalDate/Time 属性?
如果没有,我怎样才能永久注册一个新的 GSON 构建器 https://stackoverflow.com/a/36136066/3244925
- 这个问题是相关的:如何使用 Gson 序列化和反序列化 Java 8 的 java.time 类型? https://stackoverflow.com/questions/23072733/how-to-serialize-and-deserialize-java-8s-java-time-types-with-gson
- 我尝试实现这个:https://github.com/gkopff/gson-javatime-serialisers https://github.com/gkopff/gson-javatime-serialisers但这不会将自身注入为新的默认反/序列化器,并且需要手动使用
这些 java 8 日期支持尚未在 json 视图中实现。这将在视图 1.2.0(发布时)和当时最新版本的 grails-java8 插件中开箱即用。
编辑:澄清一下,只有在使用内置渲染策略(g.render、hal.render、jsonapi.render 等)时才不受支持。您仍然可以按照自己想要的任何方式自行构建视图:
json {
someLocalDate LocalDate.now.format(...)
}
Edit2:Json 视图 1.2 已与 grails-java8 插件(也是版本 1.2)一起发布。现在,这两个插件一起支持开箱即用的 Java 8 日期类型渲染。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)