Web services @RequestParam spring MVC,使两个请求参数中的一个成为必需的

Web services @RequestParam spring MVC,使两个请求参数中的一个成为必需的,web-services,spring-mvc,controller,request,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 = "locati

我正在编写一个服务,其中我接受一个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框架非常陌生


提前谢谢。

我认为您应该将其分为两种不同的控制器方法

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

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

public enum MethodType
{
   First,
   Second
}

public class Filter
{
   [Required]
   public MethodType {get;set;} 
   [Required]
   public string Data {get;set;}
}
将此对象用于操作方法和视图
让控制器中的action方法转换对象

Java提到了这个问题。答案是正确的,它正在工作,但请注意,第二个@RequestParam不是必需的,在本例中是回调。