2015-01-08 28 views
1

我寫一個服務,其中我參加的ID或者是一個位置,我想強制約束,要麼ID或位置必須在我指定@控制器@RequestParam春天MVC,提出兩個要求之一PARAMS強制性

@Controller 
public class HelloController { 
    @RequestMapping(value="/loc.json",method = RequestMethod.GET) 
    public @ResponseBody String localiaztionRequest(@RequestParam(value = "location", required = false) String callback 
      ,@RequestParam(value = "id", required = false) String uuid 
      ,@RequestParam(value = "callback", required = false) String callback) { 
     //model.addAttribute("message", "Hello world!"); 

     return "hello"; 
    } 

爲了清楚起見,我希望每個請求都發送位置參數或id參數。我如何在一對輸入參數上執行這樣的約束?另外,如果有人請向我解釋使用ModelMap,model.addAttribute(「message」,「Hello World!」)的效果如何? 對不起,如果問題看起來很天真,我對春天框架非常陌生。

在此先感謝。

回答

1

我覺得你應該把它分成兩個不同的控制方法

@RequestMapping(value="/loc.json",method = RequestMethod.GET, params={"location"}) 
public @ResponseBody String localizationRequestByLoc(@RequestParam String location, @RequestParam String callback) { 
    //model.addAttribute("message", "Hello world!"); 

    return "hello"; 
} 

@RequestMapping(value="/loc.json",method = RequestMethod.GET, params={"id"}) 
public @ResponseBody String localizationRequestById(@RequestParam String id, @RequestParam String callback) { 
    //model.addAttribute("message", "Hello world!"); 

    return "hello"; 
} 
0

一種方式來做到這一點(雖然間接的)是創建表示數據在傳遞一個新的對象模型和其他代表數據類型並且需要這兩個元素。

public enum MethodType 
{ 
    First, 
    Second 
} 

public class Filter 
{ 
    [Required] 
    public MethodType {get;set;} 
    [Required] 
    public string Data {get;set;} 
} 

使用此對象的操作方法和視圖 ,並讓在控制器的動作方法將對象轉換