Pau*_*aul 11 spring servlets spring-mvc
我一直在用Spring改造现有的webapp.显然,从Spring开始比在以后添加它更容易.
我们有可以接受多个请求参数的servlet.根据参数的数量,将采取不同的行动.例如,
/doSomething?prod=15
Run Code Online (Sandbox Code Playgroud)
显示产品15和的信息
/doSomething?prod=15&owner=99
Run Code Online (Sandbox Code Playgroud)
将产品15的所有者设置为99和
/doSomething?prod=15&delete=y
Run Code Online (Sandbox Code Playgroud)
删除产品15.
我有一个控制器工作,但我不知道如何根据参数的数量调用不同的方法.例如,这是有效的(琐碎的方法只是为了确保我的基础工作):
@RequestMapping(method=RequestMethod.GET)
public ModelAndView doIt(@RequestParam("prod") int prod, Model model)
{
ModelAndView mav = new ModelAndView();
mav.setViewName("jsonView");
return mav;
}
Run Code Online (Sandbox Code Playgroud)
但不是这个:
@RequestMapping(method=RequestMethod.GET)
public ModelAndView doIt(@RequestParam("prod") int prod, Model model)
{
ModelAndView mav = new ModelAndView();
mav.setViewName("jsonView");
return mav;
}
@RequestMapping(method=RequestMethod.GET)
public ModelAndView doIt(@RequestParam("prod") int prod,
@RequestParam("owner") int owner,
Model model)
{
ModelAndView mav = new ModelAndView();
mav.setViewName("jsonView");
return mav;
}
Run Code Online (Sandbox Code Playgroud)
抛出IllegalStateException,"为HTTP路径'/ mytest'映射的不明确的处理程序方法"并继续说明:
如果您打算在多个方法中处理相同的路径,那么将它们分解为一个专用的处理程序类,并在类型级别映射该路径!
我不明白那条消息告诉我要做什么.
如果我设置方法接受比传递的更多或不同的参数,我得到"客户端发送的请求在语法上是不正确的()".
保罗
cli*_*unk 21
RequestMapping注释告诉Spring哪些URL请求映射到控制器.您可以将值放在方法级别或类级别.
在您的示例中,两个请求映射之间没有任何区别.但是你可以这样做:
@RequestMapping(value="/bar/example.htm", method={RequestMethod.GET}, params={"prod", "owner"})
public String doIt( @RequestParam("prod") int prod,
@RequestParam("owner") int owner) {
LOGGER.trace("in doIt(int,int)");
return "foo/bar";
}
@RequestMapping(value="/bar/example.htm", method={RequestMethod.GET}, params={"prod"})
public String doIt( @RequestParam("prod") int prod) {
LOGGER.trace("in doIt(int)");
return "foo/bar";
}
Run Code Online (Sandbox Code Playgroud)
如果需要,您甚至可以在它们之间共享模型:
@Model
public static Map<String,Object> model() {
LOGGER.trace("in model()");
Map<String,Object> model = new HashMap<>();
model.put("hello", "hello world");
return model;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8755 次 |
| 最近记录: |