Intermittant / не работает перенаправления при использовании HttpServletResponse.sendRedirect () - PullRequest
2 голосов
/ 21 мая 2019

Решение использует Java и Spring rest API. Когда одна из моих конечных точек API выполняется с помощью вызова API, запрос передается обработчику. На данный момент я делаю инъекцию (@autowired) в объект HttpServletResponse через конструктор.

Я изо всех сил пытаюсь понять, почему я испытываю следующее поведение, при котором перенаправление не всегда работает.

В этом примере показан код ошибки.

@Controller
public class ConnectController {

    private final IConnectHandler connectHandler;

    @Lazy
    @Autowired
    public ConnectController(IConnectHandler handler) {
        this.connectHandler = handler;
    }

    @GetMapping("/redirect")
    public String redirectHandler() {
        this.connectHandler.providerRedirect();
    }
}

@Service
public class ConnectHandler implements IConnectHandler {

    private final HttpServletResponse response;

    @Lazy
    @Autowired
    public ConnectController(HttpServletResponse response) {
        this.response = response;
    }

    @Override
    public String redirectHandler() {
        response.sendRedirect("http://somewhere.com");
    }
}

В этом примере показан минимум, необходимый для правильной работы

@Controller
public class ConnectController {

    private final IConnectHandler connectHandler;

    @Lazy
    @Autowired
    public ConnectController(IConnectHandler handler) {
        this.connectHandler = handler;
    }

// Now inject here and it all starts working
    @GetMapping("/redirect")
    public String redirectHandler(HttpServletResponse response) { 
        this.connectHandler.providerRedirect();
    }
}

@Service
public class ConnectHandler implements IConnectHandler {

    private final HttpServletResponse response;

    @Lazy
    @Autowired
    public ConnectController(HttpServletResponse response) {
        this.response = response;
    }

    @Override
    public String redirectHandler() {
        response.sendRedirect("http://somewhere.com");
    }
}

В конкретном методе, с которым я столкнулся в этом странном поведении, я выполняю перенаправление с помощью метода sendRedirect.

Моя проблема в том, что это кажется очень ненадежным и в большинстве случаев возвращает шаблон не найдена ошибка.

НО, если я внедряю HttpServletResponse в метод контроллера, все работает должным образом, даже если я не использую этот конкретный объект и продолжаю использовать тот, который вводится в обработчик.

Я довольно новичок в этой структуре, и я уверен, что это из-за моего ограниченного понимания, но если бы кто-то мог указать мне правильное направление и дать некоторое представление, я был бы благодарен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...