Ich habe eine Anwendung mit Spring MVC, die mit einem REST-Dienst interagiert. Die Benutzeroberfläche verfügt über eine typische Formulareingabe mithilfe von JSP.Im Frühjahr MVC kann keine Eingabe an ein Datumsfeld mit einem Jackson @ JsonFormat
Es ist ein Objekt, das ich dem Benutzer das schließt ein Datumsfeld zu ändern und bleiben zulassen möchte:
public class TheObject {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "PST")
private Date myDate;
.
.
.
}
Und auf der UI dies an einen Eingang gebunden ist:
<form:input path="myDate"/>
Also, in meinem Controller, wenn ich das Formular post, und ich habe eine richtige "JJJJ-MM-TT" Zeichenfolge eingegeben in diesem Eingabefeld bekomme ich Null für das Feld und einen verbindlichen Fehler. Controller-Methode sieht wie folgt aus
@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
}
Wenn ich am BindingResult sehen dort sehe ich eine Fehlermeldung, die folgenden:
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]
Wenn ich die @Valid nehmen ich eine Ausnahme mit der gleichen Botschaft.
Wie soll ich das binden können?
Wenn ich die Annotation durch @DateTimeFormat (Muster = "JJJJ-MM-TT") ersetzen, funktioniert die Bindung einwandfrei. Aber das Objekt benötigt diese Jackson Annotation.
'@ DateTimeFormat' wird für die Bindung von Modellattributen verwendet. '@ JsonFormat' ist für diesen Prozess irrelevant. '@ JsonFormat' wird für die Jackson-Serialisierung verwendet. '@ DateTimeFormat' ist für diesen Prozess nicht relevant. –
Danke! Das ist ziemlich genau das, was ich zu dem Schluss gekommen bin, dass die 2 Attribute nicht zusammen passen. – Luke