有没有办法改进 Grails 4 JSON 转换器处理 LocalDate 对象的方式?
Is there a way to improve how the Grails 4 JSON converter handles LocalDate objects?
在我的 Grails 4.0.5 应用程序中,我有一个域 class AssignedItem
:
import java.time.LocalDate
class AssignedItem
{
LocalDate dateAssigned
}
当我调用我的控制器方法 /assignedItem/show/1
时,它使用我的域 JSON 视图 class (_assignedItem.gson
),然后响应看起来不错:
{
"id": 1,
"dateAssigned": "2015-12-30"
}
但是在我将 AssignedItem
转换为 JSON 以便将其发送到 ActiveMQ 队列的服务方法中,JSON 最终变得不必要的复杂。
服务方式
import grails.converters.JSON
void sendSampleData() {
AssignedItem assignedItem = AssignedItem.first()
JSON json = assignedItem as JSON
String jsonString = json.toString(true)
jmsService.send(queue: assignedItemQueueName, jsonString)
}
上述代码中`jsonString如下:
{
"id": 1,
"dateAssigned": {
"dayOfWeek": {
"enumType": "java.time.DayOfWeek",
"name": "THURSDAY"
},
"month": {
"enumType": "java.time.Month",
"name": "DECEMBER"
},
"dayOfMonth": 31,
"dayOfYear": 365,
"era": {
"enumType": "java.time.chrono.IsoEra",
"name": "CE"
},
"year": 2015,
"monthValue": 12,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
},
"leapYear": false
}
}
有没有办法修复 assignedItem as JSON
的行为,或者我是否应该以其他方式将 AssignedItem
转换为 JSON?
感谢@puneet-behl 向我指出这一点,我能够在我的服务方法中使用 JsonViewTemplateEngine
,这样我的 JSON 视图模板 (_assignedItem.gson
)用于生成 JSON:
void sendSampleData() {
AssignedItem assignedItem = AssignedItem.first()
Template t = templateEngine.resolveTemplate('/assignedItem/_assignedItem')
def writable = t.make(assignedItem: assignedItem)
def sw = new StringWriter()
writable.writeTo( sw )
String jsonString = sw.toString()
jmsService.send(queue: assignedItemQueueName, jsonString)
}
在我的 Grails 4.0.5 应用程序中,我有一个域 class AssignedItem
:
import java.time.LocalDate
class AssignedItem
{
LocalDate dateAssigned
}
当我调用我的控制器方法 /assignedItem/show/1
时,它使用我的域 JSON 视图 class (_assignedItem.gson
),然后响应看起来不错:
{
"id": 1,
"dateAssigned": "2015-12-30"
}
但是在我将 AssignedItem
转换为 JSON 以便将其发送到 ActiveMQ 队列的服务方法中,JSON 最终变得不必要的复杂。
服务方式
import grails.converters.JSON
void sendSampleData() {
AssignedItem assignedItem = AssignedItem.first()
JSON json = assignedItem as JSON
String jsonString = json.toString(true)
jmsService.send(queue: assignedItemQueueName, jsonString)
}
上述代码中`jsonString如下:
{
"id": 1,
"dateAssigned": {
"dayOfWeek": {
"enumType": "java.time.DayOfWeek",
"name": "THURSDAY"
},
"month": {
"enumType": "java.time.Month",
"name": "DECEMBER"
},
"dayOfMonth": 31,
"dayOfYear": 365,
"era": {
"enumType": "java.time.chrono.IsoEra",
"name": "CE"
},
"year": 2015,
"monthValue": 12,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
},
"leapYear": false
}
}
有没有办法修复 assignedItem as JSON
的行为,或者我是否应该以其他方式将 AssignedItem
转换为 JSON?
感谢@puneet-behl 向我指出这一点,我能够在我的服务方法中使用 JsonViewTemplateEngine
,这样我的 JSON 视图模板 (_assignedItem.gson
)用于生成 JSON:
void sendSampleData() {
AssignedItem assignedItem = AssignedItem.first()
Template t = templateEngine.resolveTemplate('/assignedItem/_assignedItem')
def writable = t.make(assignedItem: assignedItem)
def sw = new StringWriter()
writable.writeTo( sw )
String jsonString = sw.toString()
jmsService.send(queue: assignedItemQueueName, jsonString)
}