美文网首页
SpringBoot_01_Building a RESTful

SpringBoot_01_Building a RESTful

作者: 温走马 | 来源:发表于2018-07-07 06:32 被阅读9次

    官方:http://spring.io/guides/gs/rest-service/


    POM

     Spring Boot Maven plugin 提供以下功能:

    1. 打包jar或者war,或者其他的。

    2. 搜寻main入口方法。

    3. 提供一个自动匹配springboot版本的依赖解析器,但是我暂时不知道有什么用。

    实现的目标

    我们创建了一个springboot的web项目,并且引入了依赖。

    我们实现一个接受get请求,返回一个json。接受一个带参数的get请求,返回一个json。返回的json大致如下:

    { "id": 1, "content": "Hello, World!"}

    首先我们手动的创建一个pojo对象类:

    package com.springbootexamples.restfulwebservice.hello;

    public class Greeting {

        private final long id;

        private final Stringcontent;

        public Greeting(long id, String content) {

            this.id = id;

            this.content = content;

        }

        public long getId() {

            return id;

        }

        public StringgetContent() {

            return content;

        }

    }

    创建Controller

    @RestController注解的类,即可成为一个controller

    package com.springbootexamples.restfulwebservice.hello;

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

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

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

    import java.util.concurrent.atomic.AtomicLong;

    @RestController

    public class GreetingController {

        private static final String template = "Hello, %s!";

        private final AtomicLong counter = new AtomicLong();

        @RequestMapping("/greeting")

        public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {

            return new Greeting(counter.incrementAndGet(),

                    String.format(template, name));

        }

    }

    这是一个很简单的controller,在spring引擎下还有很多事,下面我们一步一步分析他。

    这个例子并没有展示出get、post、put之间的区别,因为RequestMapping默认会包含所有请求方法映射,可以使用@RequestMapping(method=GET)缩小范围。

    如果路由会将请求定位到greeting()方法,@RequestParam注解会查询url请求中的name参数的值。

    如果参数name对应的值是缺省的,那么会用默认的World来代替。

    这个方法体的实施是创造并且返回一个新的Greeting对象,这个对象包含一个id和一个content,id会在计数器的作用下不断增加,string的format方法会将name参数按照template 的格则整理。

    传统的MVCController和Restful的Controller一个明显区别是,传统mvc是将视图渲染为html进行返回,但是restful会将对象转换成json返回。

    这一篇的代码,使用Spring4中的新的@RestController注解,这个类作为一个Controller存在,作用是,在每个方法中返回一个domainObject(一个实体类,或者可以理解为其他人经常说的pojo对象),而代替view,他是@Controller 和@ResponseBody组合在一起的缩写。

    Greeting对象必须转换为json,由于Spring的HTTp消息转化支持,不需要去自己做json的转换,因为Jackson2在我们的类路径里面,Spring的MappingJackson2HttpMessageConverter会自动的将Greeting转化为json。

    让这个应用变成可执行的

    即使我们可能将服务器作为传统的war包部署在外部的服务器中,但是下面利用了一个更加简单的方法创建了一个独立的应用程序,我们将所有的东西打包在一个单独的可执行的jar中,通过java的main方法驱动,接着,你可以将Spring支持的TomcatServlet打包到jar作为程序的运行环境,而不是部署到外部的服务器实例。

    让我们看下面的main方法:

    package com.springbootexamples.restfulwebservice;

    import org.springframework.boot.SpringApplication;

    import org.springframework.boot.autoconfigure.SpringBootApplication;

    @SpringBootApplication

    public class RestfulwebserviceApplication {

        public static void main(String[] args) {

            SpringApplication.run(RestfulwebserviceApplication.class, args);

        }

    }

    @SpringBootApplication的作用:

    @SpringBootApplication这个注解包含了三个注解的作用,分别是:(默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan,下面分别解释:

    1. @Configuration:提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件。

    相当于:

    @Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。

    2. @EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。

    3.@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。

    另外,我们发现整个工程没有web.xml也没有其他的xml。

    打包成为可执行jar

    如果我们用的maven,./mvnw spring-boot:run命令来运行,./mvnw clean package打包一个jar。

    然后使用下面的语句运行jar:

    java -jar target/gs-rest-service-0.1.0.jar

    当然,我们也可以打war。

    让我们来测试一下

    无参数 有参数,并且计数器加1

    其他

    关于【AtomicLong】

    参考资料:java多线程--AtomicLong和LongAdder

    Java并发编程札记-(三)JUC原子类-06JDK1.8新增:LongAdder、DoubleAdder、LongAccumulator、DoubleAccumulator

    相关文章

      网友评论

          本文标题:SpringBoot_01_Building a RESTful

          本文链接:https://www.haomeiwen.com/subject/gxpiuftx.html