SpringMVC实现REST风格URL的两种方法



REST风格URL使用GET、POST、PUT、DELETE四种HTTP方法来完成CRUD的操作,但是PUT时存在后台接收不到参数的问题,这个问题有两种解决办法


1、在web.xml中加入一个filter


      <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>


    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


这个filter的作用就是把POST请求转换成PUT或DELETE请求,但是需要我们在发送POST请求时添加一个额外的参数_method,它的值为"PUT"时表示转换成PUT请求,为"DELETE"时表示转换成DELETE请求



2、其实直接发送PUT请求也是可以接收到参数,只不过参数要通过一个Java bean来接收,比如对于UserController中更新用户信息这个方法,如果我们这么写
  
@RequestMapping(value = "users/{userId}", method = RequestMethod.PUT)
@ResponseBody
public void update(@PathVariable String userId, String userName, int age){
    //...
}


是接收不到userName和age的,但是如果我们换种写法就可以收到了


@RequestMapping(value = "users/{userId}", method = RequestMethod.PUT)
@ResponseBody
public void update(@PathVariable String userId, @RequestBody User user){
//...
}
public class User{
private String userId;
private String userName;
private int age;
//getter and setters
//...
}

但是有时候更新的数据我们没有一个合适的Java bean来接收或者只有一两个参数没必要写一个Java bean,这时候怎么办呢?答案就是使用Map或MultiValueMap来接收,然后再手动取出来

@RequestMapping(value = "users/{userId}", method = RequestMethod.PUT)
@ResponseBody
public void update(@PathVariable String userId, @RequestBody MultiValueMap<String, Object> user){</span>
String userName = (String)user.getFirst("userName");
//...
}


最后附两篇参考文章
http://stackoverflow.com/questions/5894270/springmvc-is-not-recognizing-request-body-parameters-if-u
http://blog.csdn.net/u011403655/article/details/44590315
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值