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注释是如何工作的。