在Spring MVC中,不能使用Jackson @JsonFormat

时间:2016-07-12 00:26:26

标签: java spring jsp spring-mvc jackson

我有一个使用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"/>

所以,在我的控制器中,当我发布表格时,我已经输入了正确的&#34; yyyy-MM-dd&#34;在该输入框中的字符串我得到该字段的null和绑定错误。控制器方法看起来像这样

@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]

如果我取出@Valid,我会收到同样消息的异常。

我该如何绑定它?

如果我用@DateTimeFormat替换注释(pattern =&#34; yyyy-MM-dd&#34;)那么绑定工作正常。但该对象需要杰克逊注释。

1 个答案:

答案 0 :(得分:2)

所以在发布完所有内容后,我意识到我可以添加两个注释并且可以正常工作

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

所以我会发布这个作为答案以防万一其他人遇到这个问题(除非有人认为我上面描述的是非常糟糕的做法或任何事情)。