2014-11-04 1 views
0

스프링 4.0으로 웹 애플리케이션을 작성 중입니다.스프링 MVC : 컨트롤러 URL 패턴과 일치하는 링크 생성

저는 컨트롤러가 처리하는 URL 패턴을 정의하기 위해 @RequestMapping 주석을 사용하는 일반적인 방법으로 생각하는 것에 내 컨트롤러를 작성했습니다.

코드 조각은 아래 증언을 표시하는 컨트롤러에 대한이 설명은 ...

@Controller 
@RequestMapping("/testimonialView") 
public class TestimonialRequestController { 
    @RequestMapping(value="/{testimonialName}", method=RequestMethod.GET) 
    public ModelAndView testimonialRequest(@PathVariable String testimonialName, ModelAndView modelAndView) throws FileNotFoundException { 
     Testimonial testimonial; 

     . . . 
    } 
} 

는 다른 곳에서 내 응용 프로그램에서 나는 내 왼쪽 탐색에 포함 할 모든 평가를 포함하는 링크 모음을 생성합니다. 앵커 요소가 링크 모음으로 이동하는 나는 HREF를 구성 순간

는,이 같은 URL을 하드 코딩 오전 :

String href="/testimonialView/" + testimonialName; 

이 잘 보이지 않는다. 나중에 URL 구조를 변경하려면 적어도 두 곳 이상에서 변경해야합니다. 일단 들어오는 URL이 컨트롤러와 일치하면 사용자가 해당 URL을 호출하기 위해 클릭하는 앵커 요소를 생성합니다.

이 문제를 해결하는 가장 좋은 방법은 있습니까? 공통점이 있어야합니다. 상수를 사용하여 URL을 나타내고 다른 장소에서 액세스하는 것처럼 간단합니까? 내 예제가 간단하다는 것을 알고 있지만, 복잡한 URL 구조를 가진 훨씬 더 큰 웹 어플리케이션에 문제가 존재한다고 가정하고 있으므로, 가장 좋은 방법이 무엇인지 이해하고 싶습니다.

나는 이것이 바보 같은 질문이 아니길 바란다. 처음부터 모범 사례를 구현하는 것이 중요합니다. Stackoverflow와 Google을 통해 보았지만이 특정 질문에 대한 답변은 없습니다.

도움을 주신 모든 도움.

답변

2

@RequestMapping이 컴파일 타임에 데이터를 코드에 넣기 때문에이 작업을 동적으로 수행 할 수 없다는 것이 간단합니다.

그러나 두 가지 옵션이 있습니다.

는 당신은 별도의 클래스에 문자열 상수를 정의 할 수 있습니다
    1. - 이것은 당신이 당신은 봄에서 런타임에 요청 매핑을 탐색 할 수 있습니다
    2. URL의 이름을 변경하는 것이 쉽게 할 것이다, 그래서 몇 가지 코드를 가질 수있는 다른 곳에서 코딩 한 URL을 찾았습니다. URL이 동적 콘텐츠 일 때, 코딩 된 콘텐츠 일 때를 식별하기 위해이 작업을 수행했습니다.

    나의 추천

    @RequestMapping(URLs.TESTIMONIAL_VIEW) 
    

    String href= URLs.TESTIMONIAL_VIEW + "/" + testimonialName; 
    
  • +0

    응답 해 주셔서 감사합니다. 당신의 제안 된 접근 방식은 내가 더 좋은 방법이 있는지 궁금해했을 때 내가 시작했던 것입니다. – Auspice

    1

    이 AFAIK에 대한 더 좋은 연습이 없습니다와

    public class URLs { 
    
        public static final String TESTIMONIAL_VIEW = "/testimonialView"; 
    } 
    

    입니다. 애쉴리가 말했듯이 당신이 할 수있는 대부분의 일은 상수를 사용하는 것입니다. 그러나 웹과 같은 다른 클라이언트 - 서버 상황에서와 마찬가지로 계약 (URL의 경우)을 변경하면 클라이언트 (예 : 링크)와 서버 (컨트롤러 매핑) 모두에 대해 그렇게해야합니다. .

    나는 컨트롤러가 더 일반적 일 수 있음을 언급 할 것입니다. 예를 들어, "감사장"컨트롤러와 "컨트롤러보기/{이름}"이 해당 컨트롤러 내의 작업으로 표시 될 수 있습니다. 희망이 있습니다.

    +0

    팁 주셔서 감사. – Auspice