Spring MVC: Erforderlich Datum parameter 'Datum' ist nicht vorhanden
Ich Schreibe eine Webanwendung mit Spring MVC. In meiner jsp ist ein Formular, das Inhalte senden mit Ajax zu meinem controller.
Der vereinfachte code für die zugeordneten Methode sieht:
@RequestMapping(value = "/filter", method = RequestMethod.POST)
public String filter(@RequestParam(required=false) Date createdTo) { }
Ich habe mich registriert, CustomDateEditor mit:
@InitBinder
public void registerBinders(WebDataBinder binder){
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
binder.registerCustomEditor(Date.class, new CustomDateEditor(format, true));
}
Wenn der String in der Formular-Eingabe korrekt ist, wird keine Ausnahme ausgelöst.
Das problem ist, dass, wenn die Eingabe für das Datum ist leer oder enthält eine Zeichenfolge kann nicht konvertiert werden, um Datum, bekomme ich die exception: Required Date parameter 'createdTo' is not present
.
Habe ich auch geschrieben meine eigenen DateEditor und beim Debuggen, habe ich bemerkt, dass das problem tritt auf, wenn der editor setzt zurückgegebene Wert auf null mit setValue(null)
.
Wenn ich veränderte den code so, dass der zurückgegebene Wert ist das aktuelle Datum setValue(new Date())
alles funktioniert auch für leere Saiten.
Warum meine mapped-Methode nicht erlaubt zu haben "@RequestParam(required=false) Datum createdTo' null-Wert?
Warum ist es so und wie kann ich fox?
Antrag ist zu senden mit:
$.ajax({
type: 'POST',
url: '<c:url value="/admin/documents/filter"/>',
data: data
}).done(doneFunction);
Den controller-code ist:
@Controller
@RequestMapping("/admin/Dokumente")
public class AdminDocumentsController extends BaseController {
@InitBinder
public void registerBinders(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new DateEditor());
}
@RequestMapping(value = { "", "/" }, method = RequestMethod.GET)
public String showDocuments(Model model) {
model.addAttribute("so", new DocumentsSearchOptions());
return "admin/documents";
}
@RequestMapping(value = "/filter", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> filter(@RequestParam String number,
@RequestParam String invoiceNumber,
@RequestParam String userSurname, @RequestParam(required=false) Double fromPrice,
@RequestParam(required=false) Double toPrice, @RequestParam(required=false) Integer fromPoints,
@RequestParam(required=false) Integer toPoints, @RequestParam String createdFrom,
@RequestParam(required=false) Date createdTo, @RequestParam String invoiceFrom,
@RequestParam String invoiceTo, @RequestParam String paidFrom,
@RequestParam String paidTo) {
Map<String, Object> model = new HashMap<>();
return model;
}
Daten-und Objekt-Wrapper werfen MissingServletRequestParameterException
wenn Ihre entsprechenden input-Felder leer sind.
Ich habe versucht, zwei senden von Daten in zwei Arten: a)
var data = $('#form').serialize()
und dann sah Sie etwas, das wie param1=¶m2=¶m3=
b) Lesen jede Eingabe separetly erstellen einer Daten-Objekt: var param1 = $('#param1).val(); var param2 = $('#param2).val(); var data = { param1: param1, param2: param2 }
InformationsquelleAutor Nav | 2013-07-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausnahme, die Sie erhalten (
MissingServletRequestParameterException
) ist eigentlich nur geworfen, wenn ein parameter erforderlich, aber nicht vorhanden. Der parameter kann auch leer sein.Zudem verbindliche passiert nach die parameter überprüfen. Das bedeutet, dass, wenn man die Ausnahme, es ist vor benutzerdefinierten editor aufgerufen wird.
Das problem muss auf eine andere Methode. Vielleicht leiten Sie in die
filter
Methode.setValue(null)
so scheint es, die abwartend war vor dem check. Was mehr ist, ist keine Umleitung in der Methode.Legen Sie einen Haltepunkt für
MissingServletRequestParameterException
, dann wissen Sie, wenn es passiert 🙂 ach ja, welche version von Spring, die Sie benutzen? Was ich schrieb, könnte ja falsch sein, für frühere Versionen.Ich bin mit Spring 3.2.3. Also warum bin ich in der Lage zu gehen in verbindliche Methode, bevor die exception geworfen wird?
Bitte, legen Sie den Haltepunkt, und Sie werden sehen. Sie wissen, ich kann nur vermuten, aber Sie können tatsächlich überprüfen Sie es heraus 🙂
Nun, ich denke, es ist wegen meiner mangelnden Erfahrung mit Debuggen Ausnahmen, aber ich bekam keine nützlichen Informationen, mit diesen Haltepunkt. Aber es ist richtig, dass die Ausnahme ausgelöst wird, bevor verbindliche Methode. Allerdings hab ich noch keine Idee warum es nicht funktioniert. Ich könnte gehen herum und "alle ändern" @RequestParam die Zeichenfolge und dann konvertieren Sie Sie in der Controller-Methode, aber es woldn nicht eine schöne Lösung
InformationsquelleAutor a better oliver