Rückgabe eines einfachen map-Struktur von spring mvc-controller zu ajax
Bin ich mit spring mvc 4 und zu versuchen, um wieder eine einfache map
zu ajax - aus meinem controller jsp-Datei.
Controller:
@RequestMapping(value = "/ajaxtest", method = RequestMethod.GET)
public @ResponseBody
Map<String, String> myTest() {
System.out.println("------------------------------------test");
Map<String,String> myMap = new HashMap<String, String>();
myMap.put("a", "1");
myMap.put("b", "2");
return myMap;
}
Ajax aus der jsp-Datei:
function testAjax() {
$.ajax({
url : '../../ajaxtest.html',
dataType: "json",
contentType: "application/json;charset=utf-8",
success : function(data) {
alert("1");
alert(data);
}
});
}
Aber ich bekomme keine Warnmeldung, sondern nur die Fehler HTTP/1.1 406 Not Acceptable
.
Jedoch, dass sich der code nach return ein string ist, funktioniert einwandfrei.
Controller:
@RequestMapping(value = "/ajaxtest", method = RequestMethod.GET)
public @ResponseBody
String myTest() {
System.out.println("------------------------------------test");
return "hello";
}
Ajax:
function testAjax() {
$.ajax({
url : '../../ajaxtest.html',
success : function(data) {
alert("1");
alert(data);
}
});
}
Alarmierung 1
und hello
von ajax als erwartet.
Habe ich den jackson jar-Dateien, wie erwartet (von pom.xml):
dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.1</version>
</dependency>
Bin ich etwas fehlt?
Ich will einfach nur, um wieder eine einfache mapping-Struktur (oder eine andere Klasse Struktur in der Zukunft).
Update:
Vom Frühjahr Konsole (nicht sicher, dass es-bezogen):
Resolving exception from handler [null]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
Vielen Dank im Voraus!
Mike
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob es der richtige Weg, aber ich löste es wie folgt.
In der Steuerung, konvertierte ich die Karte zu json:
und in der jsp:
Dank Euch allen!!!
Mike
}
Versuchen, hinzufügen
consumes="application/json"
undproduces={ "application/json"}
an die @RequestMapping zu lassen, Frühling Prozess Ihrer json -UPDATE 406 Fehler Beschreibung
HTTP-Fehler 406-Nicht akzeptabel
Einführung
Einem client (z.B. Ihr Webbrowser oder unser CheckUpDown-Roboter) können zeigen, um den Web-server (auf dem die Website läuft) die Merkmale der Daten, die er akzeptieren wird wieder von den Web-server. Dies geschieht mit 'accept-Header' der folgenden Typen:
Akzeptieren: Die MIME-Typen von dem Kunden akzeptiert. Zum Beispiel kann ein browser akzeptieren nur zurück Arten von Daten (HTML-Dateien, GIF-Dateien, etc.) Sie weiß, wie Sie zu verarbeiten sind.
Accept-Charset: Der Charakter sets von dem Kunden akzeptiert.
Accept-Encoding: - Die Verschlüsselung der Daten von dem Kunden akzeptiert z.B. die Datei-Formate versteht.
Accept-Language: Die natürlichen Sprachen (Englisch, Deutsch, etc.) von dem Kunden akzeptiert.
Accept-Ranges: Ob der Kunde akzeptiert, reicht der bytes, die von der Ressource, d.h. ein Teil der Ressource.
Wenn der Web-server erkennt, dass die Daten, die er zurückkehren möchte nicht annehmbar ist, an den client, es gibt einen header zurück, mit dem 406 Fehlercode.
Es bedeutet, dass Sie irgendwie verändert, sollten Sie Ihre server-Logik zu akzeptieren MIME/Charset/Encoding etc. der Antrag, den Sie gesendet vom client. Kann nicht genau sagen, was falsch ist, sondern versuchen zu spielen, mit Kopf-und verbraucht der RequestMapping.
@RequestMapping(value = "/ajaxtest", method = RequestMethod.GET, consumes="application/json", produces={ "application/json"})
aber nicht das problem lösen...Dein "problem" ist aufgrund Ihrer Anfrage endet in
.html
. Sie müssen fügen Sie die folgende Konfiguration, damit es funktioniert, wie Sie erwarten, dassund als tun, als @StanislavL vorgeschlagen, fügen Sie die
produces={ "application/json"}
nicht hinzufügen, die verbraucht verursachen Sie Ihre Buchung nicht alle JSON -eine Erklärung
Wenn der Frühling bestimmt die Darstellung, die es konvertiert, sucht es zuerst in den Pfad-Teil der Anfrage (zB .html -, .json .xml), als es aussieht für einen parameter festlegen explizit die Umwandlung der Repräsentation, schließlich geht für einen Accept-header (die sogenannte PPA-Strategie)
deshalb ist Ihr Beispiel funktioniert
du bist immer HTML zurück. Allerdings mit der bitte
sind Sie ausdrücklich zu sagen, dass Sie erwarten, dass
JSON
wieder vom server, jedoch .html ist deutete an, dass es sein sollteHTML
statt, und Sie am Ende in ProblemeLernen, die details der content-negotiation-Strategie, die Sie Lesen sollten, diese blog, seine fast berühmt durch jetzt 🙂 Es wird auch zeigen Ihnen die Reine java-config-version
Ihre Ajax-Aufruf sollte so Aussehen:
Spring-Controller-Code sollte wie folgt :
Können Sie auch beziehen sich auf diese link für das Verständnis der Bibliothek, die diese Funktion unterstützen.
Versuchen Sie dies:
Müssen Sie diese Abhängigkeit :
Fügen Sie diese wenn schon noch nicht :
jackson-mapper-asl
undjackson-core-asl
in der version1.9.2
aber immer noch nicht funktioniert...