【问题标题】:@RequestParam spring MVC , make one of two request params mandatory@RequestParam spring MVC ,强制要求两个请求参数之一
【发布时间】:2015-01-08 16:22:29
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: web-services spring-mvc controller request


    【解决方案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";
    }
    

    【讨论】:

    • 答案是正确的,它正在工作,但请注意第二个@RequestParam 不是必需的,在这种情况下是回调。
    【解决方案2】:

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

    public enum MethodType
    {
       First,
       Second
    }
    
    public class Filter
    {
       [Required]
       public MethodType {get;set;} 
       [Required]
       public string Data {get;set;}
    }
    

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

    【讨论】:

    • 这个问题是用Java提到的。
    猜你喜欢
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多