Перенаправить просто отображение ссылки вместо перенаправления пользователя по ссылке

Вот метод контроллера, с которого я пытаюсь перенаправить:

@GetMapping("/opensignup/{id}")
public String openSignUp(@PathVariable(value = "id") Long Id) {

    Tournament comp = tournamentRepository.findOne(Id);
    boolean b = true;
    comp.setSignUpOpen(b);

    return "redirect:/comp/" + Id;
}

У меня есть другой метод (который является сообщением, если это актуально), который успешно перенаправляет на правильную страницу / контроллер с той же строкой:

   return "redirect:/comp/" + Id;

Вместо перенаправления он просто печатает эту ссылку в браузере. (Он печатает его с правильным идентификатором.) Вот так:

перенаправление: / comp / 5

Как мне заставить его перенаправлять вместо печати?

У вас есть аннотация @ResponseBody где-нибудь во втором вызываемом методе?

Bennett Dams 24.04.2018 18:12

поскольку вы работаете в браузере, вы можете сделать это с помощью JS. просто поймайте ответ и откройте его, как location.href= link, если после этого отправите ответ, если вам нужно

parlad 24.04.2018 18:15

@BennettDams нет, но я только что понял, где я сказал, что это работает, до того, как в классе появилась аннотация @ conntroller, но в этом классе у него была аннотация @ RestController. Может ли это быть причиной?

Lucia 24.04.2018 18:25

@Lucia Да, я отправлю ответ как можно скорее.

Bennett Dams 24.04.2018 18:27

@BennettDams Оказывается, это вызвал @ RestController, спасибо.

Lucia 24.04.2018 18:29

Очень любезно с вашей стороны, что избавил меня от голоса против, великодушный друг. Я не нашел вопросов о переполнении стека с той же проблемой. Я Четверной проверил синтаксис перенаправления "return": / comp / "+ Id;" по сравнению с другими ответами на переполнение стека с аналогичными перенаправлениями, я не видел смысла связывать их, поскольку синтаксис был правильным. Если обращение к ним помогло бы кому-то ответить на мой вопрос, приношу свои извинения.

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

Ответы 2

Это произошло потому, что в верхней части моего метода была аннотация @RestController вместо @Controller. Поскольку мне не нужно, чтобы он успокаивал, я изменил его, и моя проблема решена. Если кто-то хочет пролить свет на то, почему это так и / или как вы бы это сделали, сохраняя аннотацию @RestController (если возможно), тогда не стесняйтесь.

Ответ принят как подходящий

Как указано в комментариях, ваш второй метод аннотирован @RestController. В то время как @Controller предназначен для возврата представлений в контексте Spring, @RestController предназначен для возврата того, что будет записано непосредственно в тело ответа (в большинстве случаев JSON).

@RestController в основном представляет собой комбинацию аннотации @ControllerА ТАКЖЕ и @ResponseBody, при этом вторая будет пытаться сопоставить POJO с JSON.

Дальнейшее чтение:

https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

Разница между аннотацией Spring @Controller и @RestController

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