Grails 3.2 JSON 视图中的 Java 8 LocalDate
Posted
技术标签:
【中文标题】Grails 3.2 JSON 视图中的 Java 8 LocalDate【英文标题】:Java 8 LocalDate in Grails 3.2 JSON view 【发布时间】:2017-04-24 16:47:31 【问题描述】:当我尝试使用 json view 解析包含 Java 8 LocalDateTime 的简单域模型对象时,我收到堆栈溢出异常,这似乎与 GSON 实现不了解 Java 8 LocalDateTime 的事实有关.
这是一个示例 (documentation of grails views and JSON):
域类“人”
import java.time.LocalDate
class Person
Sting name
LocalDate birthDate
人员控制器
class PersonController
def index()
respond Person.findAll() as List<Person>
index.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 属性? 如果没有,我怎么能register a new GSON builder permanently
这个问题相关:How to serialize and deserialize Java 8's java.time types with Gson? 我尝试实现这个:https://github.com/gkopff/gson-javatime-serialisers,但这不会将自己注入为新的默认反序列化器,需要手动使用
【问题讨论】:
您使用的是什么版本的 JSON 视图?更新的版本添加了 Java 8 日期支持 您好@GraemeRocher,感谢您的反馈。我完全不使用 JSON 视图,为我解决了这个问题。可悲的是。但也许这个线程可以用于遇到这个问题的其他人。我在使用这个 maven 包时遇到了上述问题:org.grails.plugins:views-json:1.2.0.M2 您可能需要将plugins.grails.org/plugin/grails-java8 添加到您的类路径 好点。我不知道这个插件,因为上面的错误发生了,所以它不存在。感谢您的意见。 【参考方案1】:这些 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 日期类型渲染现在与 2 个插件一起支持开箱即用。
【讨论】:
那么这是否意味着在那之前我们不能在域类中使用 loacalDateTime 来休息?我刚刚在 json 视图 1.1.5 中遇到了这个问题,如果我有没有 java8 插件也没关系 您仍然可以使用 json 视图,您只需要自己构建它们,而不是依赖默认渲染器 (g.render)。以上是关于Grails 3.2 JSON 视图中的 Java 8 LocalDate的主要内容,如果未能解决你的问题,请参考以下文章