Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用spring引导将抽象参数传递给requestMapping函数_Java_Spring_Spring Boot_Abstract Class_Request Mapping - Fatal编程技术网

Java 使用spring引导将抽象参数传递给requestMapping函数

Java 使用spring引导将抽象参数传递给requestMapping函数,java,spring,spring-boot,abstract-class,request-mapping,Java,Spring,Spring Boot,Abstract Class,Request Mapping,我有一个抽象类“Agent” 和其他3个子类“开发者”,“支持”和“管理员” 以下是“代理”的代码源: “开发者”类的代码源 } 其余的类“Admin”、“Supprort”具有相同的形式 这是我的控制器代码管理员控制器: @Controller public class AdminController { /*------- attributs -------*/ @Autowired @Resource(name = "admin") private IAdmin iAdmin;

我有一个抽象类“Agent” 和其他3个子类“开发者”“支持”“管理员”

以下是“代理”的代码源:

“开发者”类的代码源

}

其余的类“Admin”、“Supprort”具有相同的形式

这是我的控制器代码管理员控制器:

@Controller

public class AdminController {


/*------- attributs -------*/


@Autowired
@Resource(name = "admin")
private IAdmin iAdmin;


@Autowired
private AgentValidator agentValidator;

........

@RequestMapping(value = "/admin/save/developer", method = RequestMethod.POST)

public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Developer developer, BindingResult result) {

    Agent admin = iAdmin.profile(Integer.parseInt(admin_id));

    developer.setConfirmPassword(confirmPassword);

    agentValidator.validate(developer, result);

    if (result.hasErrors()) {

        model.addAttribute("action", action);

        return "formAgents";

    }

    if (action.equals("create")) {

        iAdmin.createAgent(admin, developer);

    } else {

        iAdmin.updateAgent(admin, developer);

    }

    return "redirect:/admin/show/agents";

}

.......
正如您看到的,此函数创建并更新开发人员帐户,但我需要保存所有代理类型[管理员、开发人员、支持],我尝试以下操作:

   public String createAgentAccount(Model model, ... , @ModelAttribute("agent") Agent developer, BindingResult result) {.....}
但我得到了这个错误:

Tue Aug 22 19:54:03 WEST 2017
There was an unexpected error (type=Internal Server Error, status=500).
Failed to instantiate [com.GemCrmTickets.entities.Agent]: Is it an    abstract class?; nested exception is java.lang.InstantiationException

我知道实例化一个抽象类是不可能的。我不想为每种类型的代理做一个函数,一个为所有代理都是最好的解决方案。所以我需要你的帮助。谢谢你。

你的答案只有一个字。使用
Ad hoc polymorphics
,这意味着您可以有多个
createAgentAccount
方法,然后在每个方法中调用另一个方法来处理细节

更新 这就是我认为你想要的

@RequestMapping(value = "/admin/save/developer", method = RequestMethod.POST)
public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Developer developer, BindingResult result) {
    return createAgentAccount(model, admin_id, confirmPassword, action, developer, result);
}

@RequestMapping(value = "/admin/save/support", method = RequestMethod.POST)
public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Support support, BindingResult result) {
    return createAgentAccount(model, admin_id, confirmPassword, action, support, result);
}

private String createAccount(Model model, String admin_id, String confirmPassword, String action, Agent agent, BindingResult result) {

    Agent admin = iAdmin.profile(Integer.parseInt(admin_id));

    agent.setConfirmPassword(confirmPassword);

    agentValidator.validate(agent, result);

    if (result.hasErrors()) {

        model.addAttribute("action", action);

        return "formAgents";
    }

    if (action.equals("create")) {

        iAdmin.createAgent(admin, agent);

    } else {

        iAdmin.updateAgent(admin, agent);

    }

    return "redirect:/admin/show/agents";
}

你的答案是一个字。使用
Ad hoc polymorphics
,这意味着您可以有多个
createAgentAccount
方法,然后在每个方法中调用另一个方法来处理细节

更新 这就是我认为你想要的

@RequestMapping(value = "/admin/save/developer", method = RequestMethod.POST)
public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Developer developer, BindingResult result) {
    return createAgentAccount(model, admin_id, confirmPassword, action, developer, result);
}

@RequestMapping(value = "/admin/save/support", method = RequestMethod.POST)
public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Support support, BindingResult result) {
    return createAgentAccount(model, admin_id, confirmPassword, action, support, result);
}

private String createAccount(Model model, String admin_id, String confirmPassword, String action, Agent agent, BindingResult result) {

    Agent admin = iAdmin.profile(Integer.parseInt(admin_id));

    agent.setConfirmPassword(confirmPassword);

    agentValidator.validate(agent, result);

    if (result.hasErrors()) {

        model.addAttribute("action", action);

        return "formAgents";
    }

    if (action.equals("create")) {

        iAdmin.createAgent(admin, agent);

    } else {

        iAdmin.updateAgent(admin, agent);

    }

    return "redirect:/admin/show/agents";
}

你能给我举个例子吗!你能给我举个例子吗!
@RequestMapping(value = "/admin/save/developer", method = RequestMethod.POST)
public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Developer developer, BindingResult result) {
    return createAgentAccount(model, admin_id, confirmPassword, action, developer, result);
}

@RequestMapping(value = "/admin/save/support", method = RequestMethod.POST)
public String createAgentAccount(Model model, String admin_id, String confirmPassword, String action, @ModelAttribute("agent") Support support, BindingResult result) {
    return createAgentAccount(model, admin_id, confirmPassword, action, support, result);
}

private String createAccount(Model model, String admin_id, String confirmPassword, String action, Agent agent, BindingResult result) {

    Agent admin = iAdmin.profile(Integer.parseInt(admin_id));

    agent.setConfirmPassword(confirmPassword);

    agentValidator.validate(agent, result);

    if (result.hasErrors()) {

        model.addAttribute("action", action);

        return "formAgents";
    }

    if (action.equals("create")) {

        iAdmin.createAgent(admin, agent);

    } else {

        iAdmin.updateAgent(admin, agent);

    }

    return "redirect:/admin/show/agents";
}