Каковы случаи использования свойства `name` аннотации RequestMapping в Spring Framework? - PullRequest
3 голосов
/ 11 апреля 2020

Извинения, если вы находите этот вопрос тупым ... Я новичок в Spring Framework. Я часами искал ответ ...

Согласно официальной документации Spring Framework, вы можете присвоить имя аннотации RequestMapping, используя свойство name.

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#name -

Итак, вопрос в том, какой смысл давать имя для отображения маршрута?

В Symfony framework мы можем использовать имя для отображения сгенерировать URL.

class BlogController
{
    /**
     * @Route(name="BlogComments", path="blog/{blog}/comments/{page}")
     */
    public function listBlogComments(Blog blog, page)
    {
        ...
    }
}

И затем мы можем сгенерировать URL на основе имени маршрута.

// This will generate a string "blog/27/comments/1".
$url = $this->generateUrl('BlogComments', [
    'blog' => 27,
    'page' => 1
]);

Это возможно благодаря компоненту Symfony\Component\Routing\Router.

Класс контроллера может быть записан следующим образом в среде Spring.

@Controller
@ResponseBody
class BlogController {

    @RequestMapping(name="BlogComments", path="blog/{blog}/comments/{page}")
    public List<Comment> listBlogComments(@PathVariable Blog blog, @PathVariable Long page) {
        ...
    }
}

Теперь, как мне сгенерировать URL на основе имени сопоставления, которое в данном случае равно "BlogComments"? Есть ли какой-либо компонент или служба Spring, доступные в рамках Symfony? Какие другие возможные варианты использования доступны?

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

@RequestMapping атрибут имени аннотации можно использовать для присвоения имени отображению класса и метода контроллера.

@Controller
@ResponseBody
@RequestMapping(name = "BlogController")
class BlogController {

    @RequestMapping(name="BlogComments", path="blog/{name}")
    public List<Comment> listBlogComments(@PathVariable String name) {
        ...
    }
}

Библиотека тегов Spring JSP предоставляет функцию mvcUrl, которую можно использовать подготовить ссылки на методы контроллера, основанные на этом механизме.

<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
...
<a href="${s:mvcUrl('BlogController#BlogComments').arg("test").buildAndExpand()}">Get Coments</a>
0 голосов
/ 11 апреля 2020

Из документации:

publi c abstract String name

Присвойте имя этому отображению. Поддерживается как на уровне типа, так и на уровне метода! При использовании на обоих уровнях объединенное имя получается путем конкатенации с «#» в качестве разделителя.

Ключевой момент: При использовании на обоих уровнях

Поэтому вам следует назначить имя для контроллера, а также, и он должен начать работать.

@Controller
@ResponseBody
@RequestMapping(name = "AdminController")
class BlogController {

    @RequestMapping(name="BlogComments", path="blog/{blog}/comments/{page}")
    public List<Comment> listBlogComments(@PathVariable Blog blog, @PathVariable Long page) {
        ...
    }
}

И затем вы можете получить доступ к URL-адресу с помощью #

<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

<a href="${s:mvcUrl('AdminController#BlogComments').arg("1","123").build()}">Get Person</a>

Приложения могут создавать URL-адрес контроллера метод по имени с помощью метода stati c MvcUriComponentsBuilder # fromMappingName или в JSP с помощью функции "mvcUrl", зарегистрированной в библиотеке тегов Spring.

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