Приведенный ниже 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.
Пожалуйста, добавьте контроллер, например redirect:/controller/showAbc
@john, так ты говоришь, что мы не можем перенаправить на метод POST?
@DeedarAliBrohi, с перенаправлением все в порядке, я хочу знать, как передать аргументы?
Возможный дубликат Передача атрибута модели во время перенаправления в Spring MVC и предотвращение того же в URL
@MehrajMalik Нет, я не уверен, что Annotation @ RequestBody будет вмешиваться в это или нет, если я передаю атрибуты flash, я должен получить атрибут из flashMap в разделе Атрибуты перенаправления. Но этот API также запускается из пользовательского интерфейса, где экземпляр Abc требуется в качестве тела запроса.
Пожалуйста, попробуйте это
ModeAndView m = new ModelAndView("redirect:/showAbc");
Abc abc = abcRepository.findByBcdId(bcdId);
m.addObject("abc",abc);
return m;
это действительно работает? Согласно это, это не
@eis Ага. Запрос должен быть переадресован, для этого нельзя перенаправить.
да. пересылка и перенаправление - это разные вещи.
Я бы не рекомендовал вызывать один 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;
Потрясающие !! Это очень помогло, следил бы за тем же!
То, что вы пытаетесь сделать, мне кажется неправильным. Первый метод должен запускаться на
POST /showAbc
, а второй с перенаправлением никогда этого не делать. Я бы сказал, что нет никакого запроса POST.