Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringRequestBody与邮递员测试_Java_Rest_Spring Mvc_Postman_Spring Annotations - Fatal编程技术网

Java SpringRequestBody与邮递员测试

Java SpringRequestBody与邮递员测试,java,rest,spring-mvc,postman,spring-annotations,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

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

我的代码:

  @RequestMapping(value = "/test/{subscriberId}", method = RequestMethod.PATCH, consumes = "application/json", produces = "application/json")
public void test(@PathVariable final String subscriberId,@RequestBody Boolean actDeact ) {
..
}
当我通过邮递员提出请求时,我会接受400个错误的请求:

但当我只在身体中传递真实信息时,一切都很好:

我不明白为什么会这样

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


有人能解释一下吗?

布尔值的反序列化只是一个布尔值。是的

如果要以第一种方式接受参数,则应通过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 ) {
..
}
试着这样做:

 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注释)

你可以参考 更多

注:

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

@如果要发送以下内容,可以使用RequestParam: 字符串,布尔值作为参数,不带包装器

同样

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

那么你把真的送到哪里去了 这不是一个有方法的主体。 它无法工作或转换为json 所以它会返回一些状态码

400错误请求响应代码的扩展。 如果您还需要了解更多信息,可以阅读文档 弹簧。 我希望这能帮助你。。。。
谢谢。

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

它适用于布尔值,因为test()方法中有“@RequestBody boolean actDeact”,您应该将其更改为接受任何对象,您将在PostmanI中的请求正文中以JSON格式传递该对象。我知道,如果我制作一个wrraper,这将起作用。我只是想了解为什么字符串对象或布尔对象不必像对象一样在json中传递它,而只需传递值。因为您使用RequestBody注释,这意味着“由该对象组成的请求体”。布尔值本身不是json对象,它只是一个值。如果您想要接受简单的值,请摆脱RequestBody注释,或者只将值作为请求负载发送。我知道,如果我制作一个wrraper,这将起作用。我只是想了解为什么字符串对象或布尔对象不必像对象一样在json中传递它,而只需传递值。我将更新并更新您的问题,并解释spring注释是如何工作的。