복붙노트

[SPRING] 봄 3.2 mvc, 영구 상태 코드와 함께 redirectview의 일부로 컨트롤러 내에서 URL을 다시 쓰는 방법

SPRING

봄 3.2 mvc, 영구 상태 코드와 함께 redirectview의 일부로 컨트롤러 내에서 URL을 다시 쓰는 방법

 @RequestMapping(value = "/Foo/{id}/{friendlyUrl:.*}", method = RequestMethod.GET)
 public ModelAndView getFoo(@PathVariable final Long id, @PathVariable final String friendlyUrl) {

따라서 ID와 모든 문자열을 일치시킵니다. 그러나 사용자가 지정한 문자열을 보길 원합니다.

foo = fooService.get(id); //use id from pathvariable
redirectView = new RedirectView(foo.getCorrectUrl()); //set url to correct url, not that in path
redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY); //moved permanently
modelAndView = new ModelAndView(redirectView);
modelAndView.setViewName("myFoo.jsp");
return modelAndView;

사용자가 볼 수있는 URL을 제외하고 모두 잘 작동합니다.

Stackoverflow 사이트의 기존 질문에서 질문 제목이 변경 될 때와 동일한 기능을 수행합니다 (예정).

수정, 이제 거의 작동하는 아래 작업하기

  return new ModelAndView("redirect:/Foo/"+id+"/"+foo.getUrl());

하지만 임시로 이동 한 상태 코드를 반환합니다. 영구 301이 필요합니다.

다시 작성한 URL과 spring-mvc 컨트롤러를 사용하여 영구적으로 이동 된 상태 코드를 모두 얻는 방법입니까?

해결법

  1. ==============================

    1.코드에서

    코드에서

    foo = fooService.get(id); //use id from pathvariable
    redirectView = new RedirectView(foo.getCorrectUrl()); //set url to correct url, not that in path
    redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY); //moved permanently
    modelAndView = new ModelAndView(redirectView);
    modelAndView.setViewName("myFoo.jsp");
    return modelAndView;
    

    modelAndView.setViewName ( "myFoo.jsp") 호출; ModelAndView 컨스트럭터에 전달 된 View (redirectView 참조)의 값을 효과적으로 대체합니다. 따라서이 경우 setViewName을 호출하면 안됩니다.

  2. from https://stackoverflow.com/questions/14089885/spring-3-2-mvc-how-to-rewrite-url-within-controller-as-part-of-redirectview-wit by cc-by-sa and MIT license