Java SpringMVC注释控制器
我有一个控制器,它有一些动作,这些动作是通过点击页面上的各种按钮触发的。我希望有一个默认操作,但不确定如何注释该方法。以下是一个例子:Java SpringMVC注释控制器,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个控制器,它有一些动作,这些动作是通过点击页面上的各种按钮触发的。我希望有一个默认操作,但不确定如何注释该方法。以下是一个例子: @Controller @RequestMapping("/view.jsp") public class ExampleController { @RequestMapping(method = RequestMethod.GET) public ModelAndView displayResults() { ModelAnd
@Controller
@RequestMapping("/view.jsp")
public class ExampleController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView displayResults() {
ModelAndView mav = new ModelAndView("view");
mav.addObject("queryResults", methodToQueryDBForListing());
return mav;
}
@RequestMapping(method = RequestMethod.POST, params="submit=Action 1")
public ModelAndView action1(@RequestParam("selectedItemKey") String key) {
ModelAndView mav = new ModelAndView("action1");
//Business logic
return mav;
}
@RequestMapping(method = RequestMethod.POST, params="submit=Action 2")
public ModelAndView action2(@RequestParam("selectedItemKey") String key) {
ModelAndView mav = new ModelAndView("action2");
//Business logic
return mav;
}
//A few more methods which basically do what action1 and action2 do
}
我如何对一个方法进行注释,该方法将在没有选择任何键的情况下按下任何提交按钮的情况下对帖子进行操作
我试过:
@RequestMethod(method = RequestMethod.POST, params="!selectedItemKey")
@RequestMethod(method = RequestMethod.POST)
如果我必须在每个接受RequestParams的方法上设置required=false,然后有条件地检查是否有一个传入,我真的很讨厌它。。。是否有办法对此进行注释以正常工作?正确的注释是:
@RequestMapping(
method = RequestMethod.POST,
params = { "!selectedItemKey", "submit" }
)
但奇怪的是,在添加第二个参数之前,它没有命中此方法。正确的注释是:
@RequestMapping(
method = RequestMethod.POST,
params = { "!selectedItemKey", "submit" }
)
但奇怪的是,在添加第二个参数之前,它并没有命中这个方法。我将把它设置为路径变量而不是参数,并将去掉
.jsp
:
@RequestMapping("/view")
...
@RequestMapping("/action1")
@RequestMapping("/action2")
@RequestMapping("/{action}")
它更“restful”。我会将其设置为路径变量而不是参数,并且会去掉
.jsp
:
@RequestMapping("/view")
...
@RequestMapping("/action1")
@RequestMapping("/action2")
@RequestMapping("/{action}")
它更“restful”。我不太熟悉带注释的spring mvc,但我记得在扩展
MultiActionController
时,可以通过定义以下spring配置来指定默认入口点:
<bean name="myController"
class="foo.bar.MyController">
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="defaultMethodName" value="init" />
</bean>
</property>
因此,在这种情况下,您可以通过在spring配置上配置控制器而不是使用注释来解决这个问题。我对带注释的spring mvc不太熟悉,但我记得在扩展
MultiActionController
时,您可以通过定义以下spring配置来指定默认入口点:
<bean name="myController"
class="foo.bar.MyController">
<property name="methodNameResolver">
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<property name="defaultMethodName" value="init" />
</bean>
</property>
因此,在本例中,您可以通过在spring配置上配置控制器而不是使用注释来解决此问题。如果使用DefaultAnnotationHandlerMapping,您可以指定默认处理程序。如果使用DefaultAnnotationHandlerMapping,您可以指定默认处理程序。同意,如果能得到客户的认可,那就太好了。我不太确定他们是否愿意让我们“走那么远”,不幸的是……我认为这是技术上更好的解决方案,所以我认为你的答案是正确的。但是,如果有其他人无法使用restful URL,请使用我下面的答案。同意,让客户接受这一点非常好。我不太确定他们是否愿意让我们“走那么远”,不幸的是……我认为这是技术上更好的解决方案,所以我认为你的答案是正确的。但是,如果有其他人无法使用restful URL,请使用我下面的答案。