Перенаправление на API с аргументами @RequestBody

Приведенный ниже API вызывается из пользовательского интерфейса, а также он хочет быть перенаправлен другими API.

@RequestMapping(value = "/showAbc", method = RequestMethod.POST)
public ModelAndView showAbc(@RequestBody Abc abcInstance) {
    //doSomething
}

Приведенный ниже API также вызывается из пользовательского интерфейса, но он извлекает экземпляр класса Abc с помощью вызова репозитория и теперь хочет вызвать указанный выше API с помощью перенаправления, а также хочет передать экземпляр в качестве аргумента.

@RequestMapping(value = "/showBcd", method = RequestMethod.POST)
public ModelAndView showBcd(@RequestParam String bcdId){
    Abc abc = abcRepository.findByBcdId(bcdId);
    /* How to pass the instance of Abc, when redirecting to /showAbc */
    return new ModelAndView("redirect:/showAbc");
}

Теперь в приведенном выше перенаправлении я также хочу передать экземпляр Abc при перенаправлении на / showAbc из / showBcd.

То, что вы пытаетесь сделать, мне кажется неправильным. Первый метод должен запускаться на POST /showAbc, а второй с перенаправлением никогда этого не делать. Я бы сказал, что нет никакого запроса POST.

ikos23 02.05.2018 07:14

Пожалуйста, добавьте контроллер, например redirect:/controller/showAbc

Deedar Ali Brohi 02.05.2018 07:18

@john, так ты говоришь, что мы не можем перенаправить на метод POST?

Aayush Shrivastava 02.05.2018 07:32

@DeedarAliBrohi, с перенаправлением все в порядке, я хочу знать, как передать аргументы?

Aayush Shrivastava 02.05.2018 07:33

@MehrajMalik Нет, я не уверен, что Annotation @ RequestBody будет вмешиваться в это или нет, если я передаю атрибуты flash, я должен получить атрибут из flashMap в разделе Атрибуты перенаправления. Но этот API также запускается из пользовательского интерфейса, где экземпляр Abc требуется в качестве тела запроса.

Aayush Shrivastava 02.05.2018 11:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
650
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пожалуйста, попробуйте это

ModeAndView m = new ModelAndView("redirect:/showAbc");
Abc abc = abcRepository.findByBcdId(bcdId);
m.addObject("abc",abc);
return m;

это действительно работает? Согласно это, это не

eis 02.05.2018 09:29

@eis Ага. Запрос должен быть переадресован, для этого нельзя перенаправить.

Karthik R 02.05.2018 10:11

да. пересылка и перенаправление - это разные вещи.

eis 02.05.2018 10:51
Ответ принят как подходящий

Я бы не рекомендовал вызывать один API к другому, если он находится в одном приложении. Таким образом, вы плотно привязываете API к API. Либо оставьте API-контракт для вызова пользовательского интерфейса, либо обработайте делегирование через простые вызовы службы Java.

@RequestMapping(value = "/showAbc", method = RequestMethod.POST)
public ModelAndView showAbc(@RequestBody Abc abcInstance) {
    return new ModelAndView("abc",abcService.get());
}

@RequestMapping(value = "/showBcd", method = RequestMethod.POST)
public ModelAndView showBcd(@RequestParam String bcdId){
    // You should move this repo call to bcdService.java
    Abc abc = abcRepository.findByBcdId(bcdId);
    //Use a normal service call to get the instance instead of a API call
    return new ModelAndView("abc",abcService.getViaInstance(abc));
}

Однако, чтобы модель была передана в представление (Переслать запрос), вам необходимо добавить в модель как:

ModeAndView m = new ModelAndView("forward:/showAbc");
Abc abc = getAbcInstance();
m.addObject("abc",abc);
return m;

Потрясающие !! Это очень помогло, следил бы за тем же!

Aayush Shrivastava 02.05.2018 10:42

Другие вопросы по теме