当前位置: 首页 > 知识库问答 >
问题:

在Spring MVC中,不能用Jackson@JsonFormat将输入绑定到日期字段

岑俊弼
2023-03-14

我有一个使用Spring MVC的应用程序,它与REST服务交互。UI有一个典型的使用JSP的表单输入。

public class TheObject {

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "PST")
    private Date myDate;
    .
    .
    .
}

并且在UI上绑定到一个输入:

<form:input path="myDate"/>

因此,在我的控制器中,当我发布表单并在输入框中输入适当的“yyyy-mm-dd”字符串时,字段为null并出现绑定错误。Controller方法如下所示

@RequestMapping(value = "thePath", method = RequestMethod.POST)
public String postMyForm( @Valid @ModelAttribute final theObject backingModel, final BindingResult result, final Model model,
        final HttpServletRequest request) throws Exception {

        //Breakpoint here to check the binding
}

如果我查看BindingResult,我会看到一个错误,如下所示:

Field error in object 'backingModel' on field 'theDate': rejected value [2016-07-07]; codes [typeMismatch.backingModel.theDate,typeMismatch.theDate,typeMismatch.java.util.Date,typeMismatch]; 
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [backingModel.theDate,theDate]; 
arguments []; default message [theDate]]; 
default message [Failed to convert property value of type [java.lang.String] to required type [java.util.Date] for property 'theDate'; 
nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@com.fasterxml.jackson.annotation.JsonFormat java.util.Date] for value '2016-07-07'; nested exception is java.lang.IllegalArgumentException]

如果我用@datetimeformat(patter=“yyyy-mm-dd”)替换注释,那么绑定工作很好。但是对象需要Jackson注释。

共有1个答案

吴驰
2023-03-14

所以在发布了所有我意识到的东西之后,我可以添加两个注释,它就可以工作了

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "PST")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date myDate;

所以我会把这个贴出来作为答案,以防其他人遇到这个(除非有人认为我上面描述的是真的很糟糕的练习或其他什么)。

 类似资料:
  • 我想用特定的格式序列化POJO的某些日历字段。 我将添加一个格式为字符串的字段,因为它实际上是以24小时为单位表示一天,而不是一个特定的时间瞬间。但当我添加带有注释的新字段时: 我希望得到这样的JSON: 相反,我遇到了以下例外情况:

  • 我已经找了很多但仍然没有得到答案到目前为止,任何帮助是非常感谢! 我有一个简单的到字段映射,并尝试将JSON字符串读取到Java对象。 例外情况: java.lang.IllegalArgumentException:无法解析日期值“null”(格式:“dd-mmm-yyyy”):不可解析日期:“null”com.fasterxml.jackson.databind.deser.std.dateD

  • 我有两个输入字段fromDate和toDate(都是date)。我使用datepicker作为输入字段fromDate。toDate是只读的,并且依赖于fromDate。也就是说,toDate的日期是6+。例如,如果fromDate是11/30/2014,则toDate是12/6/2014。 我的jsp代码是 和js代码为: 谢谢

  • 下面是我的控制器和Init活页夹 这样,我想要的日期格式就不起作用了,这是我得到的输出expenseDate=Wed Mar 18 05:30:00 IST 2015,但我希望它变成一种特定的格式,比如yyyy-MM-dd。。。建议我怎么做。

  • 我有一个这样的用户类 我像这样接收输入 (我不希望时间包含在这个字段中)而且,我不能将变量类型从Date更改为LocaleDate