400 Bad request su Spring Jquery Ajax Post

Sto diventando un 400 bad request su questo POST di richiesta. Idea di ciò che il problema è qui ? I registri sono qui.

Controller

@Controller
public class AjaxController {
    @RequestMapping(value="/addKeys", method=RequestMethod.POST, consumes="application/json; charset=UTF-8")
    public ResponseEntity<String> addKeys(@RequestParam(value="keys") ArrayList<Keys> keys){
        System.out.println("::::::::::::::::::::::::::::::::::::::::::::::::::::::::::"+keys);
    }
}

context-Servlet.xml

<beans>
    <mvc:annotation-driven />
    <context:component-scan base-package="com.canon.fw.controller" />
    <bean id="defaultViews" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</beans>

Ajax

tmpList = '[{"key":"camera","label":"Camera"},{"key":"mobile","label":"Mobile"}]';
$.ajax({
  type: 'POST',
  url: ctx+'/ajx/addKeys',
  data: JSON.stringify({"keys": tmpList }),
  success: function(r){
      if(r.model.status=='success'){
          debugger;
          //glist.push(elem.key);
          //addToList(elem.key, elem.label);
          highlightInfoDisc();
      }
  },
  dataType: 'json',
  contentType: 'application/json'
});

FireBug – URL

http://localhost:8080/Di/ajx/addKeys

Firebug – Intestazioni Di Risposta

Cache-Control   must-revalidate,no-cache,no-store
Content-Length  1384
Content-Type    text/html; charset=iso-8859-1
Server  Jetty(6.1.26)

Firebug – Intestazioni Di Richiesta

Accept  application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection  keep-alive
Content-Length  74
Content-Type    application/json; charset=UTF-8
Cookie  JSESSIONID=7mymobst47ig1s7uqy2z1fvx4
Host    localhost:8080
Referer http://localhost:8080/Di/tiles/entNews.htm
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1
X-Requested-With    XMLHttpRequest

Firebug – Fonte

{"keys":[{"key":"canon","label":"Canon"},{"key":"ricoh","label":"Ricoh"}]}

Firebug – Risposta

"NetworkError: 400 Bad Request - http://localhost:8080/Di/ajx/addKeys"
  • nota Generale: facilmente capire il problema di fondo: Inizia con l’aggiunta di un punto di rottura, in org.springframework.http.converter.HttpMessageNotReadableException.HttpMessageNotReadableException()
InformationsquelleAutor Anand Rockzz | 2012-10-25



One Reply
  1. 12

    Pubblicazione JSON, non i dati del modulo, ma si sta tentando di leggere il ArrayList<Keys> come parametro di un modulo.

    Provare a cambiare il tuo metodo di firma da:

    public ResponseEntity<String> addKeys(@RequestParam(value="keys") ArrayList<Keys> keys){

    per

    public ResponseEntity<String> addKeys(@RequestBody Keys[] keys){

    Che potrebbe non funzionare in quanto il JSON è un oggetto che ha un keys proprietà che è la lista delle chiavi. Così si potrebbe provare a cambiare il vostro ajax inviare dati a qualcosa di simile

    data: JSON.stringify(tmpList)

    in modo che si sono semplicemente pubblicare la lista invece di avvolgerlo in un altro oggetto che ha le chiavi elemento.

    • Che funziona !! Grazie @digitaljoel.
    • Contento che ti sia stato in grado di farlo funzionare. Ho dato due opzioni qui, sarebbe utile per i futuri visitatori se si specificare quale risolto il tuo problema.
    • Ho avuto a che fare sia. Ma una volta l’ho fatto, io non sto ricevendo un @RequestBody ArrayList<Chiavi> chiavi all’interno del metodo addKeys. Sto ricevendo questo ArrayList<LinkedHashMap> chiavi !! e mi è stato sempre un classcaseException !! Strano però !! Tutte le Idee su come rendere la converte automaticamente in un Elenco di Tasti di classe ?
    • Invece di @ RequestBody ArrayList<Chiavi> i tasti come parametro, cambiato a @RequestBody Tasti tasti []. Ora funziona bene !
    • buono a sapersi, grazie per l’aggiornamento.
    • che risolto il mio problema di 400 bad request…ora il mio controller riceve la richiesta(200 ok)…koodos per la risposta…
    • Grazie a voi ragazzi per le risposte e gli aggiornamenti. Era la prima volta che ho capito la differenza tra “@RequestParam” e “@RequestBody”
    • Per qualche ragione, io non sono in grado di convertirlo in un fagiolo. Così ho dovuto utilizzare Object e funziona benissimo!! E ‘ venuto come LinkedHashMap.

Lascia un commento