Как правильно получить доступ к URL через @GetMapping? - PullRequest
0 голосов
/ 15 января 2019

Сейчас я работаю над приложением Spring, развернутым в Docker, с обратным прокси-сервером nginx и хочу получить доступ к поддомену через @GetMapping & @PostMapping.

Какой правильный способ доступа, например, субдомен /entity/add?

Это ошибка кода или мой сервер неправильно настроен? Нужно ли что-нибудь еще, чтобы правильно рассмотреть эту проблему? Я с удовольствием добавлю это.

Я просмотрел официальную документацию, руководства, другие сообщения StackOverflow и т. Д., Но ни один из них, похоже, не работает.

Controller.java:

public class EntityController {
private Repository repository;

@ModelAttribute("entity")
public Entity newEntity() {
    return new Entity();
}

// Overview.
@GetMapping("/entity")
public String index(Model model) {
    final Iterable<Entity> all = repository.findAll();

    model.addAttribute("all", all);

    return "index";
}

// New entity.
@GetMapping("/entity/add")
public String loadAddPage(Model model) {
    model.addAttribute("entity", new Entity());

    return "add";
}

@PostMapping("/entity/add")
public String submitEntity(@Valid @ModelAttribute Entity entity, BindingResult bindingResult) {
    if (bindingResult.hasErrors()) {
        return "add";
    }

    repository.save(entity);

    return "redirect:/index";
}

index.html:

<!DOCTYPE html>
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Overview</title>
<meta charset="UTF-8" />
</head>
<body>
<div class="container">
    <h2>Entities</h2>

    <form action="/entity/add" method="get">
        <input type="submit" value="New Entity"/>
    </form>

    <div class="content" th:each="entity: ${all}">
        <h2 th:text="${entity.name}">Name</h2>

        <form th:href="@{/entity/details?id={entityId}(entityId=${entity.id})}">
            <input type="submit" value="Edit"/>
        </form>
        <!--<button><a th:href="@{/entity/update?entityId={entityId}(entityId=${entity.id})}"></a></button>-->
    </div>
</div>
</body>
</html>

add.hmtl:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<title>New entity</title>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
</head>
<body>
<div class="container">
    <form action="/entity/add" method="post" th:object="${entity}">
        <table>
            <tr>
                <td><label for="name">Name</label></td>
                <td><input id="name" type="text" th:text="Name" th:field="*{name}" /></td>
            </tr>
        </table>
    </form>
</div>
</body>
</html>

Я ожидаю, что нажатие на /entity/add -форму в index.html правильно связывает меня с entity/add, но оно просто отображает ошибку 404. То же самое с другими проверенными поддоменами.

Редактировать 01: Название обновлено. (доступ к поддоменам -> доступ к URL)

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Полагаю, вы используете тимили для шаблонов.

Добавьте в файл application.properties следующее:

spring.application.name: my-app-context-path

В контроллере:

    @GetMapping({"/", "/index"})
     public String defaultPage(final Model model, final Locale locale) throws MyException {
            addGameInfo(model);
            return "index";
        }
 @GetMapping({"/match/{gameId}"}){
    --------
    ------
}

В представлении:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml"
            xmlns:th="http://www.thymeleaf.org">
    ....
    ....   
    <h1 class="text-primary">Featured Games</h1><a class="btn btn-flat btn-primary" th:href="@{/match/2944107874}">Game Info 2944107874</a>
    ....
.....
</html>

Вы должны оформить заказ Стандартный синтаксис Thymeleaf URL

Таким образом, ваш URL будет преобразован в

1. http://localhost:2223/my-app-context-path/

2. http://localhost:2223/my-app-context-path/match/2944107874

Это зависит от вашего пути контекста. Если вы его не предоставляете, вы можете получить прямой доступ к сопоставлениям.

0 голосов
/ 15 января 2019

Я понимаю ваш вопрос, так как вам нужно отправить форму для этого действия URL "/ entity / add" с методом POST. Рассмотрите возможность использования шаблонов представления Thymeleaf для рендеринга действий на стороне сервера. Сверьтесь со следующим

  1. Измените атрибут действия HTML на атрибут th:action.
  2. Предоставьте кнопку «Отправить» для отправки формы.

Проверьте этот URL для получения дополнительной информации: https://spring.io/guides/gs/handling-form-submission/

Отказ от ответственности: Это мой комментарий к вашему вопросу. Поскольку у меня нет репутации, я отправляю как ответ.

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