I'm getting a 400 bad request on this POST request. Any idea what the issue is here ? Logs are here.
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 - Response Headers
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 - Request Headers
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 - Source
{"keys":[{"key":"canon","label":"Canon"},{"key":"ricoh","label":"Ricoh"}]}
Firebug - Response
"NetworkError: 400 Bad Request - http://localhost:8080/Di/ajx/addKeys"
You are posting JSON, not form data, but you are trying to read the ArrayList<Keys>
as a form parameter.
Try changing your method signature from:
public ResponseEntity<String> addKeys(@RequestParam(value="keys") ArrayList<Keys> keys){
to
public ResponseEntity<String> addKeys(@RequestBody Keys[] keys){
That may not work since your JSON has an object that has a keys
property that is the list of keys. So you could try to change your ajax post data to something like
data: JSON.stringify(tmpList)
so that you are just posting the list instead of wrapping it in another object that has the keys element.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With