java - 为 Restful 方法编写 RequestBody

标签 java spring rest

我是 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 Debugger)

"reqObject" : {    
   "infraAddr" : "192.168.88.4",
   "infraType": {
       "value": "OBJECT"
   }
}

我收到 400 错误请求。如果我改成

 "reqObject" : {    
   "infraAddr" : "192.168.88.4",
   "InfraType": {
       "value": "OBJECT"
   }
}

我可以调试。

但是,reqObject 只接收带有“192.168.88.4”的infraAddrInfraType 为空。

谁能给我解释一下,为什么我必须使用 "InfraType" 而不是 "infraType" 以及如何为 InfraType 发送值.

最佳答案

第一个是当你的api在GET方法中你仍然无法将请求体发送到服务器,尝试将其更改为POST。

因为您在对象中使用了 ENUM,所以您应该定义一个转换器,例如 Converting JSON to Enum type with @RequestBody

但在这种情况下,我认为最快的方法是将 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"
    }
}

关于java - 为 Restful 方法编写 RequestBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33732388/

相关文章:

java - 使用数据输入流和数据输出流

java - 如何在网络中断时继续在 websockets 中发送消息?

java - 更改 websocket 范围(从应用程序到 session / View )

java - 如何在 Spring Boot 中指定回退请求映射

javascript - 如何将数据从Java方法发送到javascript函数?

java - 删除部分包名Android

java - Hibernate 不会将特定对象保存到数据库

java - JAX-RS Jersey XML <-> java.util.List

java - Spring Requestparam中+(plus)的反序列化

json - 如何从 UBER 的授权 api 获取代码