Как правильно передать параметр из одного отображения в другое? - PullRequest
0 голосов
/ 13 февраля 2019

Я пишу приложение о магазинах.Допустим, у меня есть форма с несколькими полями.Мой продукт имеет:

@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.Есть ли лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...