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.

Was ist der Inhalt der DATEN-Variablen auf Ihre ajax-post?
Ich habe versucht, zwei senden von Daten in zwei Arten: a) var data = $('#form').serialize() und dann sah Sie etwas, das wie param1=&param2=&param3= 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

Schreibe einen Kommentar