All Projects → fintonic → Versioning Spring Boot Starter

fintonic / Versioning Spring Boot Starter

Licence: mit
Spring boot starter using for versioning rest easily.

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Versioning Spring Boot Starter

Gemini
Model Driven REST framework to automatically generate CRUD APIs
Stars: ✭ 138 (+1154.55%)
Mutual labels:  rest, spring-boot, spring-mvc
Bucket4j Spring Boot Starter
Spring Boot Starter for Bucket4j
Stars: ✭ 127 (+1054.55%)
Mutual labels:  spring-boot, spring-mvc, spring-boot-starter
Spring Backend Boilerplate
The modularized backend boilerplate based on Spring Boot Framework, easy to get started and add your business part.
Stars: ✭ 134 (+1118.18%)
Mutual labels:  spring-boot, spring-mvc, spring-boot-starter
Javadevjournal
Source code for the tutorials published on the Javadevjournal site.
Stars: ✭ 141 (+1181.82%)
Mutual labels:  rest, spring-boot, spring-mvc
Tutorial
Spring Boot的例子,包含RESTful API, MVC, JMS, Cache, Mybatis, Cache, Websocket...
Stars: ✭ 215 (+1854.55%)
Mutual labels:  rest, spring-boot, spring-mvc
Spring Boot File Upload Download Rest Api Example
Spring Boot File Upload / Download Rest API Example
Stars: ✭ 300 (+2627.27%)
Mutual labels:  rest, spring-boot, spring-mvc
Velocity Spring Boot Project
A Spring Boot Starter for velocity including Spring's official and Alibaba's implementation , e.g, Layout , Tools supports.
Stars: ✭ 285 (+2490.91%)
Mutual labels:  spring-boot, spring-mvc, spring-boot-starter
Angularjs Springmvc Sample Boot
A RESTful sample using Spring Boot, Spring MVC, Spring Data and Angular/Bootstrap.
Stars: ✭ 309 (+2709.09%)
Mutual labels:  rest, spring-boot, spring-mvc
Springboot Mybatis
A REST back-end framework, integrated by Spring Boot, MyBatis and Spring Security OAuth
Stars: ✭ 359 (+3163.64%)
Mutual labels:  rest, spring-boot
Watchdog Framework
🍻 「停止维护」基于SpringBoot+Shiro+Mybatis等开发的轻量级管理系统快速开发脚手架
Stars: ✭ 421 (+3727.27%)
Mutual labels:  spring-boot, spring-mvc
Spring Lemon
Helper library for Spring Boot web applications
Stars: ✭ 529 (+4709.09%)
Mutual labels:  spring-boot, spring-mvc
Azure Spring Boot
Spring Boot Starters for Azure services
Stars: ✭ 352 (+3100%)
Mutual labels:  spring-boot, spring-boot-starter
Spring Rest Exception Handler
A convenient Spring MVC exception handler for RESTful APIs.
Stars: ✭ 351 (+3090.91%)
Mutual labels:  rest, spring-mvc
Cerberus
A demonstration of a completely stateless and RESTful token-based authorization system using JSON Web Tokens (JWT) and Spring Security.
Stars: ✭ 482 (+4281.82%)
Mutual labels:  rest, spring-boot
Spring Boot Demo
spring boot demo 是一个Spring Boot、Spring Cloud的项目示例,根据市场主流的后端技术,共集成了30+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户密码设计)、actuator(服务监控)、cloud-config(配置中心)、cloud-gateway(服务网关)等模块
Stars: ✭ 323 (+2836.36%)
Mutual labels:  spring-boot, spring-mvc
Springboot Starterkit
Starter Kit for Spring Boot based (REST APIs and WebMVC) micro services.
Stars: ✭ 596 (+5318.18%)
Mutual labels:  spring-boot, spring-mvc
Apollo
Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.
Stars: ✭ 26,052 (+236736.36%)
Mutual labels:  spring-boot, spring-mvc
Efo
EFO是一个基于SpringBoot和Vue构建的文件分享系统,包括文件的上传与下载,文件的权限管理,远程文件管理等功能。
Stars: ✭ 327 (+2872.73%)
Mutual labels:  spring-boot, spring-mvc
Heart First Javaweb
一个走心的 Java Web 入门开发教程
Stars: ✭ 561 (+5000%)
Mutual labels:  spring-boot, spring-mvc
Mini Spring
mini-spring是简化版的spring框架,能帮助你快速熟悉spring源码和掌握spring的核心原理。抽取了spring的核心逻辑,代码极度简化,保留spring的核心功能,如IoC和AOP、资源加载器、事件监听器、类型转换、容器扩展点、bean生命周期和作用域、应用上下文等核心功能。
Stars: ✭ 698 (+6245.45%)
Mutual labels:  spring-boot, spring-mvc

Spring boot starter Versioning Build Status codecov Join the chat at https://gitter.im/fintonic/versioning-spring-boot-starter Maven Central GitHub stars

Spring boot starter using for versioning rest easily.

Table of Contents

Overview

This implementation is based on the idea of this StackOverflow thread. For this approach we think that versioning with accept headers is the most RestFull option.

Getting started

Code example

An example from the server side:

import com.fintonic.microservice.starter.annotation.VersionedResource;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
    
@RestController
@RequestMapping("/test")
@VersionedResource(media = "application/vnd.app.resource")
class TestController {
    
    @RequestMapping
    @VersionedResource(from = "1.0", to = "2.0")
    public String testVersion1And2() {
        return "version-1.0-2.0";
    }
    
    @RequestMapping
    @VersionedResource(from = "3.0", to = "4.0")
    public String testVersion3And4() {
        return "version-3.0-4.0";
    }
    
    @RequestMapping
    @VersionedResource(from = "6.0")
    public String testVersion6ToInfinite() {
        return "version-6-Infinite";
    }
}

An example from the client side:

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
 
public class DemoClient {
    
    public static void main(String[] args) {
        RestTemplate restTemplate = new RestTemplate();
        //Version 1
        HttpHeaders headers = new HttpHeaders();
        headers.add("Accept", "application/vnd.app.resource-v1.0+json");
        HttpEntity<String> request = new HttpEntity<>(headers);
        ResponseEntity<String> response = restTemplate.exchange("http://localhost:8080/test", HttpMethod.GET, request, String.class);
        if(!response.getBody().equals("version-1.0-2.0") ){
            throw new RuntimeException("Error in version ");
        }
        //Version 3
        headers = new HttpHeaders();
        headers.add("Accept", "application/vnd.app.resource-v3.0+json");
        request = new HttpEntity<>(headers);
        response = restTemplate.exchange("http://localhost:8080/test", HttpMethod.GET, request, String.class);
        
        if(!response.getBody().equals("version-3.0-4.0") ){
            throw new RuntimeException("Error in version ");
        }
    }
}

Integration using @SpringBootApplication or @EnableAutoConfiguration

Only add Maven dependency:

<dependency>
    <groupId>com.fintonic</groupId>
    <artifactId>versioning-spring-boot-starter</artifactId>
    <version>LATEST_VERSION</version>
</dependency>

Without @SpringBootApplication or @EnableAutoConfiguration

Add Maven dependency:

<dependency>
    <groupId>com.fintonic</groupId>
    <artifactId>versioning-spring-boot-autoconfigure</artifactId>
    <version>LATEST_VERSION</version>
</dependency>

Configure manually RequestMappingHandlerMapping in your configuration

import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
 
@Configuration
public class WebVersionAutoConfig extends WebMvcConfigurationSupport {
    @Override
    public RequestMappingHandlerMapping requestMappingHandlerMapping() {
        VersionRequestMappingHandlerMapping handlerMapping = new VersionRequestMappingHandlerMapping();
        handlerMapping.setOrder(1);
        return handlerMapping;
    }
}

License

Spring boot starter versioning is licensed under the MIT License. See LICENSE for details.

Copyright (c) 2017 Fintonic Servicios Financieros S.L.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].