2015-03-21 10 views
5

Ich bin vor dem Fehler:AJAX POST-Anforderung an Spring MVC-Controller funktioniert nicht

Failed to load resource: the server responded with a status of 415 (Unsupported Media Type)

AJAX Teil meines Code ist wie folgt:

$.ajax({ 
    url: '/authentication/editUser',  
    type: "POST", 
    contentType: "application/json", 
    data: JSON.stringify(requestObj), //Stringified JSON Object 

    success: function(resposeJsonObject) { 
     // 
    } 
}); 

Und der Handler-Methode des Controllers:

@RequestMapping(value = "/editUser", method = RequestMethod.POST, 
    headers = {"Content-type=application/json"}) 
@ResponseBody 
public EditUserResponse editUserpost(@RequestBody EditUserRequest editUserRequest) { 
    System.out.println(editUserRequest); 
    return new EditUserResponse(); 
} 

Wie wird der Fehler behoben?

+0

Versuchen Sie, den Inhaltstyp in den Headern zu übergeben. –

+0

ist es in der Ajax-Aufruf als contentType: "application/json" –

+0

Ich sage es übergeben sie separat in den Kopfzeilen als 'headers: { 'Akzeptieren': 'application/json', 'Content-Type': ' Anwendung/JSON ' } ', etwas wie das. –

Antwort

0

ändern AJAX-Aufruf, fügen Header:

headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
} 

Ihre Gesamt AJAX-Aufruf sollte wie folgt aussehen:

$.ajax({ 
    url: '/authentication/editUser',  
    type: "POST", 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json' 
    } 
    dataType: "json", 
    data: JSON.stringify(requestObj), //Stringified JSON Object 

    success: function(resposeJsonObject) {    
     // 
    } 
}); 

Der Content-Type Header wird von @RequestBody um zu bestimmen, in welchem ​​Format die Daten verwendet gesendet werden .

+0

gleicher Fehler weiterhin - POST http: // localhost: 8080/authentifizierung/editUser 415 (Nicht unterstützter Medientyp) –

+0

Haben Sie 'dataType:" json ",' ? –

+0

ja das habe ich gemacht. –

1

manuell eingestellt Content-Type und Accept in beforeSend Handler Ihrer AJAX-Funktion und entfernen Header Ihrer Feder-Controller-Handler-Methode, um es wie funktioniert:

AJAX-Funktion:

$.ajax({ 
    url: '/authentication/editUser', 
    type: 'POST', 
    data: JSON.stringify(requestObj), //Stringified Json Object 
    beforeSend: function(xhr) { 
     xhr.setRequestHeader("Accept", "application/json"); 
     xhr.setRequestHeader("Content-Type", "application/json"); 
    } 
    success: function(resposeJsonObject){} 
}); 

und Controller Handler-Methode wie:

@RequestMapping(value = "/editUser" , method = RequestMethod.POST) 
public @ResponseBody EditUserResponse editUserpost(@RequestBody EditUserRequest editUserRequest){ 
    System.out.println(editUserRequest); 
    return new EditUserResponse(); 
} 

Siehe auch:

0

Ich denke, Sie sollten versuchen, Header in der Steuerung wie folgt zu entfernen:

@RequestMapping(value = "/editUser" , method = RequestMethod.POST) 
0

Try this .. i in Controller und jquery geändert .. hoffe es funktioniert

$.ajax({ 
     url: '/authentication/editUser',  
     type: "POST", 
     contentType: "application/json", 
     data: $("#FormName").serialize() 

     success: function(respose) { 
      // 
     } 
    }); 

A nd die Handler-Methode des Controllers:

@RequestMapping(value = "/editUser", method = RequestMethod.POST, 
     headers = {"Content-type=application/json"}) 
// removed @RequestBody 
    @ResponseBody 
    public EditUserResponse editUserpost(EditUserRequest editUserRequest) { 
     System.out.println(editUserRequest); 
     return new EditUserResponse(); 
    }