【已解决】求解: jquery 发送的 put/delete 请求里的参数在 springmvc 里怎么接收?

avatar

jquery 请求:

$.ajax({
  url: '/api/topic/${topic.id}',
  type: 'put',
  cache: false,
  async: false,
  dataType: 'json',
  headers: {
    "token": "${_user.token}",
  },
  data: {
    title: title,
    content: content,
    tags: tags,
  },
  success: function (data) {
    if (data.code === 200) {
      window.location.href = "/topic/" + data.detail.id
    } else {
      alert(data.description);
    }
  }
})

后台 controller:

@PutMapping(value = "/api/topic/{id}")
public Result edit(@PathVariable Integer id, String title, String content, String tags) {
  System.out.println(title);
  System.out.println(content);
  System.out.println(tags);
  return success();
}

打印出来的结果全是 null,id 是有的

chrome 审查元素看了下,jquery 把 put 和 delete 请求都封装成 form data 后才发送的请求,但就算是 form data 格式的参数在后台也可以接收到的吧!!


更新:测试过程中发现jQuery通过发送请求类型为 application/json 的参数(也就是传输json格式数据),然后后台通过 @RequestBody 来接收是没有问题的

然而restful规范也是建议使用 application/json 的请求类型

所以这里建议不要加上 FormContentFilter 这个Bean,而是换用 @RequestBody 来接收数据的形式开发接口

1 条评论
avatar
tomoya92 发布于 3 个月前
  0  

解决了,在程序里任意一个地方加上这个bean就可以了

@Bean
public FormContentFilter formContentFilter() {
    return new FormContentFilter();
}
添加一条评论 请尽量发布对他人有帮助的评论

登录后可发布评论

登录 | Github登录