如果我从RESTful客户端获得以下json,我如何优雅地解组java.util.Date?(有可能不提供(也就是硬编码)格式,这就是我的优雅意思......)
{
"class": "url",
"link": "http://www.empa.ch",
"rating": 5,
"lastcrawl" : "2009-06-04 16:53:26.706 CEST",
"checksum" : "837261836712xxxkfjhds",
}
Run Code Online (Sandbox Code Playgroud) 我提交了一个日期(作为字符串).我想将它映射到命令对象.我已经看了很多,并没有发现如何在命令对象中实现这种映射到实际日期的很好的资源.
如果我在控制器本身中执行此操作,我可以执行以下操作,但这不允许我轻松映射到我的命令对象.
def endDate = params.date('endDate', 'MM/dd/yyyy')
Run Code Online (Sandbox Code Playgroud)
对于我的命令对象,我能够得到的最接近的是覆盖日期对象的getter和setter.两者都需要被覆盖,否则不使用setter.这是我第一次尝试(将String设置为Date,但获取Date).所以这不使用setter:
@grails.validation.Validateable
class TaskCreateCommand {
Date startDate
public void setStartDate(String dateStr){
this.start = Date.parse('MM/dd/yyyy', dateStr)
}
}
Run Code Online (Sandbox Code Playgroud)
这不会给出任何运行时问题,但是没用,因为我无法提取实际的Date对象.
@grails.validation.Validateable
class TaskCreateCommand {
Date startDate
public void setStartDate(String dateStr){
this.start = Date.parse('MM/dd/yyyy', dateStr)
}
public String getStartDate(){
return start.toString()
}
}
Run Code Online (Sandbox Code Playgroud) 我看过一些与在Grails中使用g:datePicker相关的帖子.使用它看起来你可以像params.myDate一样从params中选择值.
但是,当我尝试在我看来做这样的事情时:
视图:
<g:link controller="c" action="a" params="[fromDate:(new Date())]">
Run Code Online (Sandbox Code Playgroud)
控制器:
def dateval = params.fromDate as Date
Run Code Online (Sandbox Code Playgroud)
日期未正确解析.我还应该在视图中做些什么来使控制器使日期"可解析".我环顾四周,并没有在任何没有使用datePicker的帖子中找到这个.
问题是什么:
在我的应用程序中,前端的数字始终,以小数点分隔符形式显示。当用户更改其区域设置并使用?lang=en_EN参数编辑实体时,发生绑定错误的问题。什么情况是,有en_EN语言环境,小数点分隔符是.使输入值11,00,1100在数据库中,而不是11.00-关键的问题,当涉及到钱。
使用的软件:
Grails 2.3.8
Groovy 2.2.1
Run Code Online (Sandbox Code Playgroud)
我想做的事:
在我的情况下,转换器中默认的“了解区域设置”方法非常有问题,我希望它们始终以相同的方式绑定,这应该与区域设置无关。
我已经尝试过的:
我发现默认情况下是由什么来做的LocaleAwareNumberConverter,更具体地说LocaleAwareBigDecimalConverter,是我写了一个简单的实现GERMAN,它只使用一种语言环境(在这种情况下,因为它,用作十进制分隔符)
@CompileStatic
class MyBigDecimalConverter extends LocaleAwareNumberConverter {
@Override
protected NumberFormat getNumberFormatter() {
NumberFormat.getInstance(Locale.GERMAN)
}
}
Run Code Online (Sandbox Code Playgroud)
包括在resources.groovy:
myBigDecimalConverter com.company.converters.MyBigDecimalConverter
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。值仍使用进行转换LocaleAwareBigDecimalConverter。
编辑:
我将转换器更改为直接实现ValueConverter:
@CompileStatic
class MyBigDecimalConverter implements ValueConverter {
@Override
boolean canConvert(Object value) {
value instanceof String
}
@Override
Object convert(Object value) { …Run Code Online (Sandbox Code Playgroud) 嗨说我有一个域类
class Book{
static hasOne=[author:Author]
long id
String name
}
class Author {
static hasMany=[books:Book]
long id
String name
}
Run Code Online (Sandbox Code Playgroud)
我发送了一个json对象.我可以执行a new Book(Json)而不是手动设置属性吗?