programing

rest 컨트롤러에 대해서만 기본 URL을 변경하는 방법은 무엇입니까?

skycolor 2023. 8. 5. 10:01
반응형

rest 컨트롤러에 대해서만 기본 URL을 변경하는 방법은 무엇입니까?

예를 들어 my api의 기본 URL이 www.example.com/user/ {id}인 경우 rest 컨트롤러에 대해서만 기본 URL을 변경할 수 있는 구성 옵션이 있습니까?

스프링 부트 v1.3.2를 사용하고 있습니다.

RequestMapping을 추가하여 RestController를 확장하는 사용자 지정 주석을 생성하려고 했습니다.여기 예가 있지만 작동하지 않습니다.

@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME) 
@RestController 
@RequestMapping(value = "/rest", path = "/rest") 
public @interface MyRestController { }

옵션 1: 사용자 지정 주석

기본 URL을 선언하는 사용자 지정 주석을 생성하고 @RestController 대신 사용합니다.

사용자 지정 RestControllerAnnotation.java

package com.example.stackoverflow.config;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@RestController
@RequestMapping("/rest")
public @interface CustomRestControllerAnnotation {}

첫 번째 RestController.java

package com.example.stackoverflow.controller;

import org.springframework.web.bind.annotation.RequestMapping;

import com.example.stackoverflow.config.CustomRestControllerAnnotation;

@CustomRestControllerAnnotation
public class FirstRestController {

    @RequestMapping("/first")
    public String firstMethod(){
        return "First Controller";
    }
}

두 번째 RestController.java

package com.example.stackoverflow.controller;

import org.springframework.web.bind.annotation.RequestMapping;

import com.example.stackoverflow.config.CustomRestControllerAnnotation;

@CustomRestControllerAnnotation
public class SecondRestController {

    @RequestMapping("/second")
    public String secondMethod(){
        return "Second Controller";
    }
}

옵션 2: 기본 받침대 컨트롤러

모든 실제 컨트롤러의 템플릿 역할을 하는 기본 컨트롤러를 생성하면 단일 위치에서 루트 URL을 효과적으로 관리할 수 있습니다.

BaseRestController.java

package com.example.stackoverflow.controller;

import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/rest")
public class BaseRestController {}

그런 다음 모든 실제 컨트롤러에 대해 이 클래스를 확장하면 됩니다.

첫 번째 RestController.java

package com.example.stackoverflow.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FirstRestController extends BaseRestController{

    @RequestMapping("/first")
    public String firstMethod(){
        return "First Controller";
    }
}

두 번째 RestController.java

package com.example.stackoverflow.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SecondRestController extends BaseRestController{

    @RequestMapping("/second")
    public String secondMethod(){
        return "Second Controller";
    }
}

옵션 3: 스프링 데이터 REST

컨트롤러가 저장소에서 데이터를 제공하는 경우 Spring Data REST는 보일러 플레이트의 대부분을 제거하고 초기 문제를 해결할 수 있습니다.

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

이 종속성을 선언하면 모든 리포지토리가 자동으로 REST를 사용하도록 설정됩니다.

속성 파일을 사용하여 기본 URL을 제어할 수 있습니다.

application.properties

spring.data.rest.basePath=/rest

Spring Boot v2.1.0에 대한 구성 업데이트

Spring Boot v2.1.0에서 기본 URL을 구성할 수 있습니다.application.properties맘에 들다

server.servlet.context-path = /baseApiName

전체 속성 구성 목록

일반적으로 모든 요청(또는 특정 집합)을 처리하는 서블릿을 정의합니다.그런 다음 서블릿에게 다음과 같은 특정 URL 패턴을 들으라고 말할 것입니다./rest.그@RequestMapping컨트롤러의 주석은 해당 '최상위' 패턴을 인식하지 못합니다.

예를 들어 Spring Web Application을 부트스트랩할 때 수동으로 해당 안정적인 서블릿을 만들고 매핑을 추가할 수 있습니다.전체 설정이 너무 커서 여기에 게시할 수 없습니다. 하지만 아래의 일부 내용을 참조하여 개념을 확인하십시오.

import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.ServletContext;
...

public class WebAppInitializer implements WebApplicationInitializer {

   public void onStartup(ServletContext servletContext) throws ServletException {
     ...
     ServletRegistration.Dynamic restfulServlet = servletContext.addServlet("myServlet", new DispatcherServlet(rootContext));
     restfulServlet.addMapping("/rest/*");
     ...

   }

추가해야 합니다.server.servlet-path=/apiapplication.properties 파일 및 domain/api/users/{id}와 같이 보내야 하는 모든 요청

언급URL : https://stackoverflow.com/questions/38212691/how-to-change-base-url-only-for-rest-controllers

반응형