繁体   English   中英

为Restful方法编写RequestBody

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM