2015-11-16 2 views
2

Я новый член в RESTful API, я пишу метод GET:Написать RequestBody для RESTful метода

@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); 
    } 
} 

Затем я послал запрос GET с RequestBody (я использую Fiddler Web Debugger)

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

Я получаю 400 Bad Request. Если я перехожу на

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

Я могу отлаживать.

Однако, reqObject принимает только infraAddr с "192.168.88.4", InfraType - null.

Кто может объяснить мне, почему я должен использовать "InfraType" вместо "infraType" и как отправить значение для InfraType.

+0

Вы не должны, вы не имеете такого имущества. –

+0

вы запрашиваете GET, у вас не может быть '@ RequestBody' –

ответ

0

Первый, когда ваш api в методе GET вы все еще не можете отправить тело запроса на сервер, попробуйте изменить его на POST.

Поскольку вы используете ENUM в вашем объекте, так что вы должны определить, как преобразователь Converting JSON to Enum type with @RequestBody

Но в этом случае, я думаю, что самый быстрый способ изменить infraType к String и использовать переключатель случай с строкой на стороне сервера.

public class RRREC{ 
    protected String infraAddr; 
    protected String infraType; 
    // getter and setter 
} 

Ваш JSON будет:

{ 
    "reqObject" : {  
     "infraAddr" : "192.168.88.4", 
     "infraType": "OBJECT" 
    } 
} 
+0

Ну, мне пришлось сменить POST, но InfraType по-прежнему null –

+0

Извините, я обновил свой ответ – codeaholicguy

+0

Если я использую« infraType »в JSON, я получаю сообщение об ошибке 404 Bad Request –

Смежные вопросы