[英]Write RequestBody for Restful method
我是Restful API的新成员,我正在编写GET方法:
@RequestMapping(method = RequestMethod.GET, value = "/resourcerecords", produces={"application/json", "application/xml"})
public @ResponseBody Object getRRs(@RequestBody RRRequest requestBody){
// do something
}
RRRequest类:
public class RRRequest{
private RRREC reqObject;
// getter and setter
}
的RRREC类:
public class RRREC{
protected String infraAddr;
protected RRINFRATYPE infraType;
// getter and setter
}
和RRINFRATYPE类:
public enum RRINFRATYPE {
V_6_ADDRESS("V6ADDRESS"),
OBJECT("OBJECT"),
ZONE("ZONE"),
V_4_REVERSEZONE("V4REVERSEZONE"),
V_6_REVERSEZONE("V6REVERSEZONE"),
NODE("NODE"),
ALL("ALL");
private final String value;
RRINFRATYPE(String v) {
value = v;
}
public String value() {
return value;
}
public static RRINFRATYPE fromValue(String v) {
for (RRINFRATYPE c: RRINFRATYPE.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
然后,我使用RequestBody发送了一个GET请求(我使用了Fiddler Web调试器)
"reqObject" : {
"infraAddr" : "192.168.88.4",
"infraType": {
"value": "OBJECT"
}
}
我收到400错误请求。 如果我更改为
"reqObject" : {
"infraAddr" : "192.168.88.4",
"InfraType": {
"value": "OBJECT"
}
}
我可以调试。
然而,reqObject只接收infraAddr
与“192.168.88.4”,该InfraType
为空。
谁可以向我解释为什么我必须使用"InfraType"
而不是"infraType"
以及如何为InfraType
发送值。
第一个是当您的GET方法中的api仍然无法将请求正文发送到服务器时,尝试将其更改为POST。
因为您在对象中使用了ENUM
,所以您应该定义一个转换器,例如使用@RequestBody将JSON转换为Enum类型。
但是在这种情况下,我认为最快的方法是将infraType
更改为String
并在服务器端对String
使用switch case。
public class RRREC{
protected String infraAddr;
protected String infraType;
// getter and setter
}
您的JSON将为:
{
"reqObject" : {
"infraAddr" : "192.168.88.4",
"infraType": "OBJECT"
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.