我正在测试我的应用程序,我发现了一些奇怪的东西。
我的代码:
@RequestMapping(value = "/test/{subscriberId}", method = RequestMethod.PATCH, consumes = "application/json", produces = "application/json")
public void test(@PathVariable final String subscriberId,@RequestBody Boolean actDeact ) {
..
}
我无法理解为什么会这样。
我认为我的第一次尝试是有效的。如果我等待一个字符串,也会发生同样的情况 (我没有得到错误代码400但是传递给我所有身体内部的字符串)
任何人都可以解释一下吗?
答案 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 。