【问题标题】:Spring: request-payload with only one elementSpring:只有一个元素的请求有效负载
【发布时间】:2017-09-10 21:51:26
【问题描述】:

我想实现一个 web 服务,它只使用 request-payload 中的一个命名参数。在 curl 视图中,它应该是这样的: curl -X PATCH myurl.net/my_service -d "{mySingleParameter: 49}"

我正在尝试使用 Spring 来实现,但我想知道要将这样的有效负载映射到我的方法,我必须声明一个新类。喜欢:

...
public static class PayloadWithSingleParamMSP{
  public Long mySingleParameter;
}

@RequestMapping(value = "my_service", method = RequestMethod.PATCH)
public String myService(@RequestBody PayloadWithSingleParamMSP payload){
  Long valueWhichIReallyNeed = payload.mySingleParameter;
  //do job
  ...
}
...

但是有没有办法直接获取我真正需要的值(mySingleParameter)?

【问题讨论】:

    标签: java spring


    【解决方案1】:

    你有几个选择:

        @RequestMapping(value = "my_service", method = RequestMethod.PATCH)
        public String myService(@RequestBody ObjectNode payload){
            Long valueWhichIReallyNeed = payload.get("mySingleParameter").asLong();
            //do job
           ...
        }
    

    @RequestMapping(value = "my_service", method = RequestMethod.PATCH)
    public String myService(@RequestBody Map<String, String> payload){
        Long valueWhichIReallyNeed = Long.parseLong(payload.get("mySingleParameter"));
        //do job
        ...
    }
    

    甚至

    @RequestMapping(value = "my_service", method = RequestMethod.PATCH)
    public String myService(@RequestBody  Long mySingleParameter){
        Long valueWhichIReallyNeed = mySingleParameter;
        //do job
        //  ...
    }
    

    但在最后一种情况下,您的 curl 将如下所示:

    curl -X PATCH myurl.net/my_service -d "49" 
    

    在此问题的答案中,您可以找到更多选项:Passing multiple variables in @RequestBody to a Spring MVC controller using Ajax

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 2011-06-30
      • 2019-04-03
      相关资源
      最近更新 更多