Перенаправление в почтовом режиме внутри метода контроллера
РЕДАКТИРОВАТЬ: Если у кого-то возникли проблемы, следуя приведенному ниже руководству, я предлагаю использовать более простой подход, например, такой: https://www.youtube.com/watch?v=yaxUV3Ib4vM
Я все еще следую этому уроку: https://examples.javacodegeeks.com/enterprise-java/spring/mvc/spring-mvc-radiobutton-and-radiobuttons-example/, и я создал этот контроллер до сих пор:
@RequestMapping(value = "add", method = RequestMethod.GET)
public String add(Model model) {
MyObject object = new MyObject();
object.setParameter("fake parameter");
model.addAttribute("add", object);
initModelList(model);
return "add";
}
@RequestMapping(value = "add", method = RequestMethod.POST)
public String add(@ModelAttribute("add") @Validated MyObject object, BindingResult result, Model model) {
model.addAttribute("add", object);
String returnVal = "redirect:/add/object";
if(result.hasErrors()) {
initModelList(model);
returnVal = "add";
} else {
model.addAttribute("add", object);
}
return returnVal;
}
@RequestMapping(value = "/add/object", method = RequestMethod.POST)
public String addObject(
@ModelAttribute MyObject object,
ModelMap model) throws DatatypeConfigurationException {
try{
...marshalling results in xml output
...inserting it in database
...showing the result
return "objectResult";
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throw new RuntimeException(e);
}
}
Конечно, это решение не работает, так как перенаправление имеет тип GET. Я попытался объединить два последних метода, вот так:
@RequestMapping(value = "add", method = RequestMethod.POST)
public String add(@ModelAttribute("add") @Validated MyObject object, BindingResult result, Model model)
throws DatatypeConfigurationException {
model.addAttribute("add", object);
String returnVal = "objectResult";
if(result.hasErrors()) {
initModelList(model);
returnVal = "add";
} else {
model.addAttribute("add", object);
}
try{
...mashalling etcetera
return returnVal;
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throw new RuntimeException(e);
}
}
Но в этом случае проверка не работает. Я не знаю, как решить эту проблему, я хотел бы использовать пружинный валидатор, но если я не смогу его использовать, я регрессирую в проекте, что является позором.
1 ответ
Если у кого-то возникают проблемы с тем же руководством, я предлагаю использовать более простой подход, например, такой: https://www.youtube.com/watch?v=yaxUV3Ib4vM Обновление зависимости maven не требуется.