2016-03-21 13 views
0

Es gibt ähnliche Links, aber ich habe keine Lösung für mich arbeiten gefunden, so fragte ich mich, ob jemand mir ein funktionierendes Beispiel für mein Szenario geben könnte. Ich mache einen Ajax get, um Daten von der Serverseite abzurufen, damit ich Diagramme auf der Clientseite dynamisch erstellen kann. Muss ich MappingJacksonHttpMessageConverter einbeziehen? Wenn das die Antwort ist, kann jemand ein Beispiel geben, dem ich folgen kann?Spring MVC zum Senden von Responsebody-Objekt an Ajax Post gibt 406 Fehler

Java:

@RequestMapping(value="/getReportData.html", method=RequestMethod.GET, produces="application/json") 
public @ResponseBody Reports getReport1Data(HttpServletRequest request) 
{ 
    System.out.println("Report 1 Page GET Method"); 

    ModelAndView mv = new ModelAndView("report1"); 

    if((Reports)request.getSession().getAttribute(USER_SESSION_REPORTS) != null){ 
     reports = (Reports)request.getSession().getAttribute(USER_SESSION_REPORTS); 
     System.out.println("--------> Report 1 Page with session data"); 
     return reports; 
    } 
    else{ 
     System.out.println("--------> Report 1 Page with NO session data"); 
    } 
    mv.addObject("report1", reports.getReport1()); 

    return null; 
} 

Javascript:

function getData(){ 
$.ajax({ 
    url: "getReportData.html", 
    type: "GET", 
    contentType: "application/json", 
    dataType: JSON, 
    success: function(report1){ 
     console.log("success: " + report1.utilRatio.decRatio); 
    }, 
    error: function(report1){ 
     console.log("error: " + report1.utilRatio.decRatio); 
    } 
}); 

}

Antwort-Header: Content-Language: "en", Content-Length: „1110 " Content-Type: "text/html; charset = utf-8" Server: "Apache-Coyote/1.1"

Anforderungsheader: Accept: "/" Accept Sprache: "en-US, en; q = 0,5" Accept-Encoding: "gzip, deflate" Content-Type: "application/json" X-Requested-With: „XMLHttpRequ est "

Antwort

1

Es sieht so aus, als ob die Header Ihrer Anfrage falsch sind. Sie können die Einstellung contentType entfernen, da Sie keine Daten an den Server senden und dataType anstelle der Variablen JSON in den Zeichenfolgenwert "json" ändern.

Auch Ihre Antwortheader sind falsch. Stellen Sie nur sicher, dass Sie immer ein Berichtsobjekt zurückgeben. Wahrscheinlich möchten Sie die HTML-Erweiterung von diesem Endpunkt entfernen, da Sie gerade ein Objekt zurückgeben.

+0

leider immer noch einen 406 Fehler ich erhalte, nachdem die tun oben: 1) nur halten datatype, und machte es „json“ 2) immer wieder Berichte in jedem Szenario Objekt 3) entfernt alle Objekte Modeland .... immer noch 406, was frustrierend ist, das ist der einzige Teil, den ich verstehen muss/und ich würde getan werden :( – Glen

+0

das sind die Bibliotheken, die ich durch Maven eingeschlossen habe, vielleicht vermisse ich einen Jackson Bibliothek brauche ich? \t \t \t com.fasterxml.jackson.core \t \t jackson-Kern \t \t 2.5.1 \t \t \t \t com. fasterxml.jackson.core \t \t Jackson-databind \t \t 2.5.1 \t \t \t com.fasterxml.jackson.core \t \t Jackson-Annotationen \t \t 2.5.1 \t Glen

0

spring verwendet @ResponseBody annotaion für die Rückgabe von Daten, da json .it den MappingJacksonHttpMessageConverter implizit aufrufen wird. Sie müssen ihn also verwenden.

@RequestMapping(value = "/getjson", method = RequestMethod.POST, produces = "application/json") 
@Transactional 
public void getJson(HttpServletRequest request, HttpServletResponse response, @RequestParam("type") String type) 
     throws DatatypeConfigurationException, IOException, JSONException { 
    JSONObject json = new JSONObject(); 
    Map<String, String[]> parameterMap = request.getParameterMap(); 
       List<Chart> chart=myService.getChart(); 
         if (Chart.size()>0) { 
       json.put("status", "SUCCESS"); 
       JSONArray array = new JSONArray(); 
       for (Chart chartData: chart) { 
        JSONObject object = new JSONObject(); 
        object.put("id", chartData.getRaasiId()); 
        object.put("name", chartData.getName()); 
        array.put(object); 
       } 
       json.put("options", array); 
      } 
     } 
    } 
    response.setContentType("application/json"); 
    System.out.println("response======" + json.toString()); 
    PrintWriter out = response.getWriter(); 
    out.write(json.toString()); 
} 

============ auf der HTML-

   jQuery 
       .ajax({ 
        url : controllerUrl, 
        dataType : 'text', 
        processData : false, 
        contentType : false, 
        type : 'GET', 
        success : function(response) { 
    success : function(response) { 
         marker = JSON.stringify(response); 
         json = jQuery.parseJSON(marker); 
         json = JSON.parse(json); 
         alert(json.status); 
         } 
       }); 

Referenz: https://rwehner.wordpress.com/2010/06/09/2-ways-to-create-json-response-for-ajax-request-in-spring3/

Verwandte Themen