为什么Joda LocalTime在Json Grails中呈现为String?

时间:2013-12-04 19:08:53

标签: json grails groovy render localtime

我在Grails中使用WorkDone域类字段的LocalTime持续时间。使用render作为JSON时,此字段将呈现为String而不是Object。我认为这是因为这个类中的toString()方法。

class WorkDone{
   LocalTime duration
}

Json output = {"duration":"00:00:00"}

但是如果我用我的自定义类CustomDuration实现这个字段,它会在生成的JSON字符串中显示整个对象。 我也在这个类中实现了toString()方法。

class WorkDone{
    CustomDuration duration
}

json output = {"duration":{ durFieldInDurationClass:"00:00:00"}}

为什么我会看到这种行为?

我在这两种情况下都有这张地图:

grails.converters.JSON.registerObjectMarshaller(WorkDone ) {
def returnMap = [:]
returnMap.put("duration", it.duration)
return returnMap
}

我的自定义持续时间等级

 class CustomDuration{
     String durFieldInDurationClass
     String toString(){
       return durFieldInDurationClass
     }
    }

我在控制器中使用render workdoneobject as JSON来生成此输出。

1 个答案:

答案 0 :(得分:1)

class CustomDuration{
 String durFieldInDurationClass
 String toString(){
   return durFieldInDurationClass
 }
 static {
  grails.converters.JSON.registerObjectMarshaller(CustomDuration) {
     return it.duration
    }
}