@RequestParam spring MVC,强制要求两个请求参数之一

时间:2015-01-08 16:22:29

标签: web-services spring-mvc controller request

我正在编写一个服务,其中我接收了一个id或一个位置,我想强制执行必须在我的@Controller中指定id或位置的约束

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

为清楚起见,我希望每个请求都发送location参数或id参数。如何对一对输入参数强制执行此类约束?另外,有人可以向我解释ModelMap的使用,model.addAttribute的效果是什么(" message"," Hello World!")? 对不起,如果问题看起来很幼稚,我对Spring框架非常陌生。

提前致谢。

2 个答案:

答案 0 :(得分:2)

我认为你应该将它分成两种不同的控制器方法

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

答案 1 :(得分:0)

实现这一目标的一种方法(虽然是间接的)是创建一个表示要传入的数据的新对象模型,另一个表示数据类型并需要两个元素。

public enum MethodType
{
   First,
   Second
}

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

将此对象用于操作方法和视图 并让控制器中的action方法转换对象