Nano Hash - криптовалюты, майнинг, программирование

На контроллере Java, как получить значение аннотации @RequestMapping (/ getThisValueFromOtherClass)?

На контроллере Java MVC, как получить значение аннотации @RequestMapping("/getThisValueFromOtherClass")? Я знаю, что мы можем извлечь это, используя отражения Java, но есть ли другой способ? Спасибо.

@RequestMapping("/getThisString")
public class MyController{}
09.11.2013

  • просто для ясности: вы хотите получить атрибут value аннотации @ReqestMapping, определенный в контроллере A, из какого-то другого класса? Также могу я узнать, каков вариант использования? 09.11.2013
  • @coder - я хотел бы получить значение аннотации, цель, если для отслеживания изменений URL-адреса, например, я ссылаюсь на этот URL-адрес из другого класса, вместо того, чтобы редактировать его во всех местах, я бы просто получил значение сопоставления например, MyController.getBaseMapping(). Я знаю, что мы могли бы получить это с помощью java-размышлений, но есть ли другой способ? 09.11.2013

Ответы:


1

Если цель состоит в том, чтобы просто избежать изменения URL-адреса в каждом месте, я предлагаю определить строковую константу в некотором классе и вместо использования жестко закодированной строки в сопоставлении запросов использовать эту константу везде. В будущем, если вы хотите изменить URL-адрес, просто обновите постоянное значение в одном месте.

окончательная строка constUrl = "/myurl";

@RequestMapping (значение = constUrl)

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

09.11.2013
  • да, я использую этот подход для сопоставления запроса метода, но я хочу извлечь это значение из суперкласса, чтобы оно было доступно для всех контроллеров, расширяющих этот класс. 09.11.2013
  • Я также рекомендую тот же подход для сопоставления запросов на уровне класса. Если вы хотите сделать эту константу ограниченной, вы можете сделать ее защищенной. 09.11.2013
  • Думаю, мне просто придется придерживаться этого подхода. Спасибо, парни! 09.11.2013

  • 2

    Значение аннотации можно прочитать программно:

    @RequestMapping("/endpoints")
    public ResponseEntity<String> getPath() {
        String path = getClass().getAnnotation(RequestMapping.class).value()[0];
        return new ResponseEntity<String>(path, HttpStatus.OK);
    }
    
    11.03.2015

    3

    Чтобы получить путь, вы должны передать запрос, т. е. HttpServletRequest, в качестве параметра вашему методу обработчика.

    @RequestMapping(value={"/getThisString"}, method=RequestMethod.GET)
    public String handlerMethod (Model model, HttpServletRequest request) throws Exception {             
       String getThatString = request.getServletPath(); 
       ....
    }
    

    Ссылка:

    09.11.2013
  • @RequestMapping доступен только для методов, но не для классов Это неправда, эта аннотация также работает для классов. Цитирование документов: Аннотация для сопоставления веб-запросов с определенными классами обработчиков и/или методами обработчиков. 09.11.2013
  • Первая строка java docs...RequestMapping Аннотация для сопоставления веб-запросов с определенными классами обработчиков и/или методами обработчиков. 09.11.2013

  • 4

    В вашем случае, если запрашивается шаблон URI “/getThisString”, он будет отображаться на этот MyController и обрабатывать запрос с помощью метода, в котором объявлен @RequestMapping(method = RequestMethod.GET).

    Вы можете обратиться к этому руководству пример @RequestMapping

    Надеюсь, поможет.

    09.11.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..