Я пишу приложение о магазинах.Допустим, у меня есть форма с несколькими полями.Мой продукт имеет:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ShopFormDto {
private String name;
private String addressName;
private String addressStreet;
private String addressCode;
private String addressCity;
Я разрешаю пользователю добавлять все поля, и допустим, что ни одно из них не является обязательным, и я не хочу решать эту проблему на своем веб-интерфейсе (я использую тимилиф).
@GetMapping("/add")
public String getCreationForm(Model model,
@RequestParam(name = "error_message", required = false) String error_message,
@RequestParam(name = "message", required = false) String message) {
model.addAttribute("supplierForm", new ShopFormDto());
if (error_message != null) {
model.addAttribute("error_message", error_message);
}
model.addAttribute("message", message);
return "shop/supplierForm";
}
Я должен проверить все поля и дать пользователю правильное сообщение об ошибке.Как это должно быть обработано.Что я делаю прямо сейчас:
@PostMapping("/add")
public String add(Model model, ShopFormDto dto) {
boolean httpUrlAddress =
dto.getUrl().matches("https://.*") ||
dto.getUrl().matches("http://.*");
boolean wwwUrlAddress = dto.getUrl().matches("www[.].*");
boolean emptyUrlAddress = dto.getUrl().isEmpty();
model.addAttribute("error_message", "Unable to add shop");
model.addAttribute("supplierForm", new ShopFormDto());
model.addAttribute("supplierList", shopService.findAll());
if (dto.getName().trim().isEmpty()) {
return "redirect:/shop/add?error_message=" + "Shop name is empty";
}
if (dto.getAddressCity().trim().isEmpty()) {
return "redirect:/shop/add?error_message=" + "City address is empty";
}
if (dto.getAddressCode().trim().isEmpty()) {
return "redirect:/shop/add?error_message=" + "Code address is empty";
}
if (dto.getAddressName().trim().isEmpty()) {
return "redirect:/shop/add?error_message=" + "Name address is empty";
}
if (dto.getAddressStreet().trim().isEmpty()) {
return "redirect:/shop/add?error_message=" + "Street address is empty";
}
if (emptyUrlAddress || httpUrlAddress || wwwUrlAddress) {
if (shopService.add(dto)) {
if (!defaultApproved) {
return "redirect:/shop/list?message=" + "Newly added shop has to be approved by admin.";
} else {
return "redirect:/shop/list?message=" + "Shop has been added.";
}
}
} else {
return "redirect:/shop/add?error_message=" + "Incorrect URL address. Started with http:// or https:// or www.";
}
return "shop/list";
}
Что я должен сделать, чтобы сделать мой код чище и проще в разработке?Я рассматриваю решения, которые также помогают мне сосредоточиться на переводах (i18n).Прямо сейчас, как вы можете видеть - я работаю только с английским.
Я ищу лучший способ передать сообщение об ошибке, чем добавление их в качестве параметров запроса в мою строку URL.Есть ли лучший способ сделать это?