Java 使用spring引导将抽象参数传递给requestMapping函数
我有一个抽象类“Agent” 和其他3个子类“开发者”,“支持”和“管理员” 以下是“代理”的代码源: “开发者”类的代码源 } 其余的类“Admin”、“Supprort”具有相同的形式 这是我的控制器代码管理员控制器: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;
@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";
}