簡體   English   中英

如何在Spring-rest中嵌套@PathVariable?

[英]How to nest @PathVariable in spring-rest?

我有一個簡單的@RestController服務,它接受查詢參數,spring會自動將它們解析為bean

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@Valid MyParams p) {
    Sysout(p.getId()); //prints "123"
}

public class MyParams {
    private int id;
    //private SubParams subs;
}

查詢: .../rest?id=123

現在我想用嵌套類構造參數對象。 我怎樣才能做到這一點?

public class SubParams {
   private String name;
   //some more
}

理想情況下,我的查詢應該是:查詢: .../rest?id=123&name=test ,“test”字符串應該進入SubParams bean。

那可能嗎?

如果需要設置為內部類,則必須注冊Custom Covertor。 改變如下:

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/rest", method = RequestMethod.GET)
public MyDTO getGiataHotel(@ModelAttribute("subParam") MyParams params, @Valid MyParams p) {
    //Do stuff
}

subParam表示存在轉換注冊的轉換器。

public class MyParamsConverter implements Converter<String, MyParams> {

    @Override
    public MyParams convert(String name) {
        MyParams myParams = new MyParams();
        SubParams subParams = new SubParams();
        subParams.setName(name);
        myParams.setSubParams(subParams);
        return myParams;
    }

}

您可以使用@ModelAttribute批注來實現此目的: http//docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-modelattrib-method-args (這不是在Path參數中,而是在requestParams中獲取/發布)

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method =   RequestMethod.POST)
public String processSubmit(@ModelAttribute("pet") Pet pet, BindingResult result) {

     if (result.hasErrors()) {
         return "petForm";
     } 

     // ...       

}

也許你應該使用RequestMethod.POST ,就像這樣

@RequestMapping(value = "/rest", method =   RequestMethod.POST)
public ModelAndView getGiataHotel(@ModelAttribute("subparams") SubParams subparams){
      SubParams sub=subparams;
      //do something...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM