Как добавить символ » s » в метод, имеющий уровень класса @RequestMapping в spring-boot-web

#java #spring #spring-boot #rest #spring-mvc

Вопрос:

Есть сопоставление уровня класса/интерфейса и метода

  @RequestMapping(value = "/post")
 public interface PostApi {

    //to get /posts
    @RequestMapping(value = "s") 
    ResponseEntity getAll();
 }
 

В принципе, я хочу добавить символ » s » в /сообщение и получить /сообщения, как это возможно

Комментарии:

1. Почему бы вам не изменить сопоставление запросов на /posts ? @RequestMapping(value = "/posts")

2. @pleft Потому что я хочу использовать /post/{id}, а не /posts/{id}, мне не нравится этот /posts/{id} для конкретного поста.. позже при добавлении дополнительных методов

3. Предложение @pleft соответствует действительности. Рекомендуется использовать существительные во множественном числе при ссылках на коллекции, см. medium.com/@mwaysolutions/… и restfulapi.net/resource-naming

Ответ №1:

 public interface PostApi {

    //to get /posts
    @RequestMapping(value = "/posts") 
    ResponseEntity getAll();

    @GetMapping(value = "/post/{id}") 
    ResponseEntity getById(@PathParam Long id);
 }
 

Комментарии:

1. Другого выхода нет ? Это единственный способ?

2. В вашем примере нет ничего плохого, он великолепен, но: есть ли хак для добавления «post» «s» ? Я ищу это решение, если вы меня поняли ?

3. Хорошо понял, но в чем причина такого взлома? чего вы пытаетесь достичь?

4. Я хочу иметь уровень класса «/post» и метод добавления «s».. Возможно ли это весной, потому что мне тоже нужно изменить другие методы, чтобы применить этот «ваш ответ», нужно перейти на многие методы

5. @acakojic Нет никакого взлома. Используйте множественное число во всех случаях или указывайте путь для каждого метода.

Ответ №2:

Вы не можете изменить контекстный путь, вместо этого удалите «/post», а затем используйте ниже «/post» и «/posts» для разных задач.

Комментарии:

1. Нет никакого способа добавить символ «s» при использовании метода для сопоставления уровня класса без » / » между ними, это глупо, но нормально..

2. То, что взлома нет, — это хорошо. По мере того как вы приобретете опыт написания и использования конечных точек RESTful, вы поймете дизайнерские решения, которые сейчас кажутся вам «глупыми». Одно я могу сказать вам с уверенностью: разработчики Spring Framework определенно знают, что они делают. Не судите об API по своим (неопытным) ожиданиям.

3. @Paul Я просто спрашиваю, есть ли для этого хак, потому что, когда другие разработчики входят в мой API и видят уровень класса/интерфейса, чтобы узнать, что они ищут, если вы меня понимаете, это более читабельно, чем смешивать методы. Я не осуждаю, я просто ищу решение, если оно есть :-)))

4. @acakojic Другие разработчики, использующие ваш API и читающие ваш код, будут ожидать /posts и не /post будут .

Ответ №3:

вы не можете объединить значения пути в одну строку пути, так как они рассматриваются как объекты в спецификации URI, а не как несколько простых строк. (если вам нравятся RFC, проверьте это: https://datatracker.ietf.org/doc/html/rfc3986#section-3.3 )

таким образом, в основном ваше сопоставление на уровне класса уже устанавливает иерархию по дизайну, и метод может настраивать только более низкий уровень внутри этой иерархии ((более ранние) весенние документы содержали следующее объяснение: «Сопоставления на уровне метода разрешены только для сужения отображения, выраженного на уровне класса (если таковые имеются)».

единственный способ обойти это-на самом деле удалить сопоставление классов и добавить отдельные сопоставления к любому методу (как указано другими). в качестве побочного эффекта: это делает ваш код намного более читабельным, поэтому рецензентам (или вам самим через 3 месяца) не нужно сопоставлять полный путь в вашем уме, пытаясь понять контроллер