【问题标题】:how to get both value @RequestBody and @RequestParam together如何同时获得值@RequestBody 和@RequestParam
【发布时间】:2017-09-19 11:21:16
【问题描述】:

如何同时获得@RequestBody 和@RequestParam 两个值? 代码下方:

 @RequestMapping(value = "/sign-up", method = RequestMethod.POST)
public ResponseEntity<?> addUser(@RequestBody User user,@RequestParam("location") String location,@RequestParam("deviceid") String deviceid) {  

    System.out.println(location);

    System.out.println(deviceid);

有可能吗? 对于@RequestParam Content-Type application/x-www-form-urlencoded 对于@RequestBody Content-type application/json 如果有任何其他方式,我想要 value location 和 deviceid?

【问题讨论】:

  • 一个请求不能有多个内容类型。除非您将多个部分作为 multipart/form-data 请求的一部分发布。否则,你的问题没有多大意义。如果您已经 pst JSON,为什么不发布一个包含用户、位置和 deviceId 的 JSON 对象?
  • 感谢回复 ..USER 不是内容位置和设备 ID ..\
  • 我想从客户端获取位置和设备ID
  • 有没有办法从客户端获取单独的@RequestParam
  • 并且 JSON 对象可以包含字符串值。因此,将这些字符串值存储在 JSON 对象中,并将该 JSON 作为请求正文发送

标签: spring rest spring-mvc spring-boot


【解决方案1】:
  1. @PathVariable 是从 uri 中获取一些占位符(Spring 称它为 URI 模板)——参见Spring Reference Chapter 16.3.2.2 URI 模板模式
  2. @RequestParam 是获取一个参数——见 Spring Reference Chapter 16.3.3.3 Binding request parameters to method parameters with @RequestParam

如果 URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013 在 2013 年 12 月 5 日获取用户 1234 的发票,则控制器方法如下所示:

@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
            @PathVariable("userId") int user,
            @RequestParam(value = "date", required = false) Date dateOrNull) {
  ...
}

此外,请求参数可以是可选的,但路径变量不能——如果是,则会更改 URL 路径层次结构并引入请求映射冲突。例如,/user/invoices 是否会为用户 null 提供发票或有关 ID 为“发票”的用户的详细信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    相关资源
    最近更新 更多