Programing/Springboot

SpringBoot jersey2-grizzly2-swagger RESTful API example REST api 서버 개발

리커니 2018. 7. 17.
반응형

SpringBoot jersey2-grizzly2-swagger RESTful API example REST api 서버 개발

 

 

이번 포스팅에서는 SpringBoot 에서

jersey2, grizzly2, swagger 라이브러리를 활용하여 REST api 를 개발하는 방법을 알아보도록 하겠습니다.

 

[SPEC]

 

SpringBoot 2.0.2 RELEASE

 

jersey-container-grizzly2-servlet 2.26

jersey-hk2 2.26

swagger-jersey2-jaxrs 1.5.0

 

 

[gradle]

 

compile group: 'org.glassfish.jersey.containers', name: 'jersey-container-grizzly2-servlet', version: '2.26'
compile group: 'io.swagger', name: 'swagger-jersey2-jaxrs', version: '1.5.0'
compile group: 'org.glassfish.jersey.inject', name: 'jersey-hk2', version: '2.26'

 

maven은 해당 name으로 구글링 하시면 쉽게 구하실 수 있습니다.

 

위의 라이브러리를 의존성 주입하신 후 @SpringBootApplication 메인 메소드를 아래와 같이 작성합니다.

 
@SpringBootApplication
public class RestApplication {
    
    private static final Logger logger = LoggerFactory.getLogger(RestApplication.class); 
    
    public static void main(String[] args) {

        ApplicationContext ctx = SpringApplication.run(RestApplication.class, args);

        RestServer restServer = ctx.getBean(RestServer.class);
        logger.info("Jersey RESTful Server Start");
        restServer.start();
    }        
}

 

이제 RestServer 클래스를 구현합니다.

 
@Service
public class RestServer {
    
    private static final Logger logger = Logger.getLogger(RestServer.class.getName());
    
    private static final URI BASE_URI = URI.create("http://localhost:8080/");  // ip, port 설정
    
    public static final String ROOT_PATH = "helloWorld";   //rootPath 설정
    
    public void start() {
        do{
            try {
                Connection();
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }while(true);
    }
    
    private void Connection(){
        try {
            final HttpServer server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, create(), false);
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
                @Override
                public void run() {
                    server.shutdownNow();
                }
            }));
            server.start();
            logger.info(String.format("Application started.%nTest Url : %s%s%n",BASE_URI, ROOT_PATH));
            Thread.currentThread().join();
        } catch (IOException | InterruptedException ex) {
            Logger.getLogger(RestServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public static ResourceConfig create() {
        String resources = "com.neighbor.ecall.geon.collection.server.resource";  //리소스들이 있는 패키지 
        BeanConfig beanConfig = new BeanConfig();
        beanConfig.setVersion("1.0.0");
        beanConfig.setSchemes(new String[]{"http"});
        beanConfig.setHost(BASE_URI.toASCIIString());
        beanConfig.setBasePath("/");
        beanConfig.setResourcePackage(resources);
        beanConfig.setScan(true);

        final ResourceConfig resourceConfig = new ResourceConfig();
        resourceConfig.packages(resources);
        resourceConfig.register(io.swagger.jaxrs.listing.ApiListingResource.class);
        resourceConfig.register(io.swagger.jaxrs.listing.SwaggerSerializers.class);

        return resourceConfig;
    }
}

 

3가지만 수정해 주시면 됩니다.

url 과 port 설정.

루트패스 설정.

create 메소드 쪽 리소스들이 있는 패키지 설정

 

그럼 간단한 리소스 예제를 보도록 하죠.

 
@Api(value = "print", description = "Print Hello World")
@Path("/print")
public class HelloWorldResource {
    private static final Logger logger = Logger.getLogger(AmCollectionResource.class.getName());
    
    /*return value 가 필요한 경우 구현 필요. 현재 void   ==>  RESTResponse.class*/
    @GET
    @Path("/{value}")
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation(value = "HelloWorld")
    public String printHelloWorld(@PathParam("value") String value) {
        return value;
    }
}

 

value로 입력받은 데이터를 리턴해 주는 간단한 api 입니다.

출력 주소는

http://localhost:8080/print/helloworld

 

print 다음 path에 입력받은 데이터가 출력되는 예제 입니다.

 

jersey, grizzly, swagger 를 이용한 간단한 REST api를 작성해 보았습니다.

이제 리소스쪽을 디자인해서 응용하면 REST적인 api를 구현 하실 수 있습니다.

 

반응형

댓글

💲 추천 글