Spring Jquery Ajax Post上的400错误请求

Ana*_*kzz 8 jquery spring-mvc http-post

我在这个POST请求上收到400个错误请求.知道这里的问题是什么吗?日志在这里.

调节器

@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

上下文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>
Run Code Online (Sandbox Code Playgroud)

阿贾克斯

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'
});
Run Code Online (Sandbox Code Playgroud)

FireBug - URL

http://localhost:8080/Di/ajx/addKeys
Run Code Online (Sandbox Code Playgroud)

Firebug - 响应标题

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

Firebug - 请求标题

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
Run Code Online (Sandbox Code Playgroud)

Firebug - 来源

{"keys":[{"key":"canon","label":"Canon"},{"key":"ricoh","label":"Ricoh"}]}
Run Code Online (Sandbox Code Playgroud)

萤火虫 - 回应

"NetworkError: 400 Bad Request - http://localhost:8080/Di/ajx/addKeys"
Run Code Online (Sandbox Code Playgroud)

dig*_*oel 12

您正在发布JSON,而不是表单数据,但您正在尝试将其ArrayList<Keys>作为表单参数进行读取.

尝试更改方法签名:

public ResponseEntity<String> addKeys(@RequestParam(value="keys") ArrayList<Keys> keys){
Run Code Online (Sandbox Code Playgroud)

public ResponseEntity<String> addKeys(@RequestBody Keys[] keys){
Run Code Online (Sandbox Code Playgroud)

这可能不起作用,因为您的JSON具有一个具有keys键列表属性的对象.因此,您可以尝试将ajax发布数据更改为类似的内容

data: JSON.stringify(tmpList)
Run Code Online (Sandbox Code Playgroud)

所以你只是发布列表而不是将它包装在另一个具有keys元素的对象中.

  • 而不是@RequestBody ArrayList <Keys>键作为参数,将其更改为@RequestBody Keys []键.现在工作正常! (2认同)