Spring PostBody with Postman测试

时间:2018-06-05 09:49:27

标签: java rest spring-mvc postman spring-annotations

我正在测试我的应用程序,我发现了一些奇怪的东西。

我的代码:

  @RequestMapping(value = "/test/{subscriberId}", method = RequestMethod.PATCH, consumes = "application/json", produces = "application/json")
public void test(@PathVariable final String subscriberId,@RequestBody Boolean actDeact ) {
..
}

当我通过邮递员提出请求时,我会收到400个不良请求: enter image description here

但是当我在身体中只通过时,一切正常: enter image description here

我无法理解为什么会这样。

我认为我的第一次尝试是有效的。如果我等待一个字符串,也会发生同样的情况 (我没有得到错误代码400但是传递给我所有身体内部的字符串)

任何人都可以解释一下吗?

3 个答案:

答案 0 :(得分:1)

布尔值的反序列化只是一个布尔值。例如:真实

如果要以第一种方式接受参数,则应该通过dto对象获取此参数。

示例:

public class ActDeactDto {
    public boolean actDeact;
}

@RequestMapping(value = "/test/{subscriberId}", method = 
RequestMethod.PATCH, consumes = "application/json", produces = 
"application/json")
public void test(@PathVariable final String subscriberId, @RequestBody 
ActDeactDto actDeact ) {
..
}

答案 1 :(得分:1)

试试这样:

 public class MyPojo
    {
  private  Boolean actDeact;
  private  String subscriberId;
    // you can add it if you want more ..

    public Boolean getActDeact() {
        return actDeact;
    }

    public void setActDeact(Boolean actDeact) {
        this.actDeact = actDeact;
    }

   public String getSubscriberId() {
    return subscriberId;
   }
   public void setSubscriberId(String subscriberId) {
    this.subscriberId = subscriberId;
   } 
 }

@RequestBody MyPojo myPojo //像这样使用它。

Spring会将传入的JSON从post主体转换为MyPojo对象(因为你添加了@RequestBody注释),它会将返回的对象序列化为JSON(因为你添加了@ResponseBody注释)。

你可以参考 https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc 更多。

注意:

  

@RequestParam带注释的参数链接到特定的Servlet   请求参数。参数值将转换为声明的值   方法参数类型。此注释表示一种方法   参数应绑定到Web请求参数。

如果你想发送,可以使用

@RequestParam: String,Boolean作为没有包装器的参数。

同样的方式

  

@RequestBody带注释的参数链接到HTTP请求主体。   参数值将转换为声明的方法参数类型   使用HttpMessageConverters。此注释表示一种方法   参数应该绑定到Web请求的主体。

所以你发送的是真的 这不是一个方法的身体。 它无法工作或转换为json 所以它将返回一些东西400状态代码

扩展400 Bad Request响应代码。 如果您仍需要了解更多信息,可以阅读该文档 弹簧 我希望这可以帮助你.... 谢谢..

答案 2 :(得分:0)

原则上,您应该检查使用HTTP方法之间的一致性。在Postman中,您使用的是 POST ,但是在您的RequestMapping方法中使用的是 PATCH