Java 如何在控制器中使用相同的方法,接收抽象类?

Java 如何在控制器中使用相同的方法,接收抽象类?,java,forms,jsp,spring-mvc,spring-roo,Java,Forms,Jsp,Spring Mvc,Spring Roo,我有5个不同的jsp和mvc spring表单。在每个表单的modelAttribute中,我都有一个特定的类(例如,dog、cat、mouse等)。每个表单都有一个提交按钮,我希望该请求将在控制器中以相同的方法提交。 在控制器中,我试图得到一个通用类(抽象)这样的动物。这给了我一个错误。我怎么能这样做 如果一只猫收到了一只猫,这很好。 谢谢 jsp: <form:form method="post" modelAttribute="Cat" action="../2/submit">

我有5个不同的jsp和mvc spring表单。在每个表单的modelAttribute中,我都有一个特定的类(例如,dog、cat、mouse等)。每个表单都有一个提交按钮,我希望该请求将在控制器中以相同的方法提交。
在控制器中,我试图得到一个通用类(抽象)这样的动物。这给了我一个错误。我怎么能这样做

如果一只猫收到了一只猫,这很好。 谢谢

jsp:

<form:form method="post" modelAttribute="Cat" action="../2/submit">
            <form:checkbox path="attribute" />
            <button type="submit">Submit</button>
</form:form>

我可以想出两种方法

技术:老派 在处理程序方法中使用类型为
WebRequest
的参数。 这样就可以访问请求参数。 然后查询所关心的参数,以确定请求的来源和所需的参数

@RequestMethod("/blammy")
public String blammy(
    final ModelMap model,
    final WebRequest webRequest)
{
    String something = webRequest.getParameter("something");

    if ("hoot".equals(something))
    {
        ... process a hoot request
    }
    else if ("bark".equals(something))
    {
        ... process a bark request
    }
}
技术:前端控制器 为每个表单证明一个方法,然后将调用转发到一个通用方法

@RequestMethod("/fish")
public String fish(
    @ModelAttribute final Fish fish,
    final ModelMap model)
{
     return commonMethod(model, (Animal)fish);
}

@RequestMethod("/cat")
public String cat(
    @ModelAttribute final Cat cat,
    final ModelMap model)
{
     return commonMethod(model, (Animal)cat);
}

public String commonMethod(
    final ModelMap model,
    final Animal animal)
{
    ... blam
}

您不应该统一请求处理程序方法,尽管使用了带有所需业务层的服务层,以便所有控制器都可以调用相同的业务逻辑。

是的,但对于第二个解决方案,这是我试图避免的。我尽量避免每个表单都有一个@RequestMethod。我只需要一个submit方法,它可以接收“相同”类型的每个类,例如:animals。谢谢
@RequestMethod("/fish")
public String fish(
    @ModelAttribute final Fish fish,
    final ModelMap model)
{
     return commonMethod(model, (Animal)fish);
}

@RequestMethod("/cat")
public String cat(
    @ModelAttribute final Cat cat,
    final ModelMap model)
{
     return commonMethod(model, (Animal)cat);
}

public String commonMethod(
    final ModelMap model,
    final Animal animal)
{
    ... blam
}