Spring MVC @RestController 및 리디렉션
Spring MVC @RestController로 구현 된 REST 엔드 포인트가 있습니다. 언젠가 내 컨트롤러의 입력 매개 변수에 따라 클라이언트에 http 리디렉션을 보내야합니다.
Spring MVC @RestController로 가능합니까? 그렇다면 예제를 보여 주시겠습니까?
HttpServletResponse
Handler Method에 매개 변수를 추가 한 다음response.sendRedirect("some-url");
다음과 같은 것 :
@RestController
public class FooController {
@RequestMapping("/foo")
void handleFoo(HttpServletResponse response) throws IOException {
response.sendRedirect("some-url");
}
}
직접적인 종속성을 피 HttpServletRequest
하거나 다음과 같은 ResponseEntity를HttpServletResponse
반환하는 "순수한 Spring"구현을 제안합니다 .
HttpHeaders headers = new HttpHeaders();
headers.setLocation(URI.create(newUrl));
return new ResponseEntity<>(headers, HttpStatus.MOVED_PERMANENTLY);
메서드가 항상 리디렉션을 반환하는 경우를 사용하십시오 ResponseEntity<Void>
. 그렇지 않으면 일반적으로 제네릭 유형으로 반환되는 모든 항목이 사용됩니다 .
이 질문을 보았고 아무도 RedirectView를 언급하지 않았다는 사실에 놀랐습니다. 방금 테스트했으며 다음을 사용하여 깨끗한 100 % 봄 방식으로 해결할 수 있습니다.
@RestController
public class FooController {
@RequestMapping("/foo")
public RedirectView handleFoo() {
return new RedirectView("some-url");
}
}
redirect
springMVC에서 의미하는 http 코드 302
를 의미 Found
합니다.
다음은 일종의 util 메소드입니다 BaseController
.
protected ResponseEntity found(HttpServletResponse response, String url) throws IOException { // 302, found, redirect,
response.sendRedirect(url);
return null;
}
그러나 때로는 301
대신 http 코드를 반환하고 싶을 수 있습니다 moved permanently
.
이 경우 util 메서드는 다음과 같습니다.
protected ResponseEntity movedPermanently(HttpServletResponse response, String url) { // 301, moved permanently,
return ResponseEntity.status(HttpStatus.MOVED_PERMANENTLY).header(HttpHeaders.LOCATION, url).build();
}
@RestController가 String 을 반환하면 다음과 같이 사용할 수 있습니다.
return "redirect:/other/controller/";
이러한 종류의 리디렉션은 GET 요청 에만 해당되며 다른 유형의 요청을 사용하려면 HttpServletResponse를 사용하십시오.
참조 URL : https://stackoverflow.com/questions/29085295/spring-mvc-restcontroller-and-redirect
'program story' 카테고리의 다른 글
GitHub 저장소 백업 (0) | 2020.12.30 |
---|---|
python3.3에서 docx를 가져올 때 ImportError : No module named 'exceptions'오류가 있습니다. (0) | 2020.12.29 |
React-Router에서 onEnter가 호출되지 않았습니다. (0) | 2020.12.29 |
솔루션 탐색기 새로 고침 단추를 클릭 할 때 Visual Studio에서 폴더를 새로 고치지 않는 이유는 무엇입니까? (0) | 2020.12.29 |
DataGridTextColumn에 도구 설명을 추가하는 방법 (0) | 2020.12.29 |