开始写代码

一、创建一个简单的接口,返回json

1、创建相应的包和类

一般我们会分包进行创建,我这里简单创建了一个controller 的包,里面写相关的接口controller
 然后再test包下我创建了一个Application 类,这个名词可以自己起。这个类是运行springboot的入口,需要进行配置下。
 Application 代码如下:

2、Application 类代码讲解

package com.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args){
        SpringApplication.run(Application.class,args);
    }
}

@SpringBootApplication 注解:
@SpringBootApplication注解一般放在项目的一个启动类上,用来把启动类注入到容器中,用来定义容器扫描的范围,用来加载classpath环境中一些bean
@SpringBootApplication =@Configuration+@EnableAutoConfiguration+@ComponentScan springboot 把这几个注解整合了。只需要写一个就可以

然后在main方法中添加SpringApplication.run(Application.class,args); 来启动应用程序

3、TestController类讲解

package com.test.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;

@RestController
public class TestController {
    //测试用的集合
    Map<String,Object> params=new HashMap<>();

    /**
     * 第一个接口测试
     * @param name
     * @return
     */
    @RequestMapping("/test")
    public Object getTest(String name){
        params.clear();
        params.put("name",name);
        return  params;
    }
}

这里用到了两个注解,@RestController、 @RequestMapping
@RestController and @RequestMapping是springMVC的注解,不是springboot特有的
(1) @RestController
@RestController 是spring4 新加入的注解,相当于@Controller +@ResponseBody 两个注解的功能和
@Controller的作用表示该类是一个控制器,可以接受用户的输入并调用模型和视图去完成用户的需求。控制器本身不输出也不处理任何东西。 我们写的接口也就是控制器里面的方法。
@ResponseBody 表示 请求以json映射的方式返回。
所以@RestController注解的类就可以 接受请求——返回json
(2) @RequestMapping
这个注解可以加载类和方法上,我理解是表示资源的映射吧,为web请求指明路径。可以定义不同的映射规则
注解在方法上表示当前方法时一个web请求的处理方法,注解在类上,应该是常用的请求地址或路由啥的

上面方法中在@RequestMapping("/test") 方法中的"/test" 就是外部访问的接口地址,暂时我们没有指定请求方法
这样外部就能通过 http://localhost:8080/test?name=张三 来进行调用这个接口。

Spring boot第一个接口 spring boot开发接口_Spring boot第一个接口

二、 get、post请求实战

get请求实战

package com.test.controller;
import com.test.domain.User;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@RestController
public class GetController {

    Map<String, Object> params = new HashMap<>();

    /**
     * 从路径中取值
     *
     * @param cityID
     * @param userID
     * @return
     */
    @RequestMapping(path = "/{city_id}/{user_id}")
    public Object getUserID(@PathVariable("city_id") String cityID,
                            @PathVariable("user_id") String userID) {

        params.clear();
        params.put("cityID", cityID);
        params.put("userID", userID);
        return params;
    }

    /**
     * 测试@GetMapping注解,以get方式请求接口
     * @param id
     * @param name
     * @return
     */
    @GetMapping(value = "/v1/getUser")
    public Object getMappingTest(String id, String name) {

        params.clear();
        params.put("name", name);
        params.put("id", id);
        return params;
    }

    /**
     * 测试,设置参数默认值,别名、以及是否必传参数
     * @param id
     * @param username
     * @return
     */
    @RequestMapping("/v1/getUser1")
    public Object getMyappingTest1(@RequestParam(defaultValue = "888",name = "uid") String id, @RequestParam(required = true) String username){
        params.clear();
        params.put("username", username);
        params.put("id", id);
        return params;
    }
    /**
     * 功能描述:bean对象传参
     * 注意:1、注意需要指定http头为 content-type为application/json
     * 		2、使用body传输数据
     * @param user
     * @return
     */
    @RequestMapping("/v1/save_user")
    public Object saveUser(@RequestBody User user){
        params.clear();
        params.put("user", user);
        return params;
    }

    /**
     * 功能描述:测试获取http头信息
     * @param accessToken
     * @param id
     * @return
     */
    @GetMapping("/v1/get_header")
    public Object getHeader(@RequestHeader("access_token") String accessToken, String id){
        params.clear();
        params.put("access_token", accessToken);
        params.put("id", id);
        return params;
    }

    /**
     * 以HttpServletRequest获取所有请求数据
     * @param request
     * @return
     */
    @GetMapping("/v1/test_request")
    public Object testRequest(HttpServletRequest request){
        
        params.clear();
        String id = request.getParameter("id");
        params.put("id",id);
        return params;
    }
    @PostMapping("/v1/login")
    public Object login(@RequestParam(required = true) String  userName, @RequestParam(required = true)String passWrod){
        params.clear();
        params.put("name",userName);
        params.put("pwd",passWrod);
        return params;
    }
    @PostMapping("/v1/class")
    public Object loginTest(User user){
        params.clear();
        params.put("name",user.getName);
        params.put("pwd",user.getPassword);
        return params;
    }

    @PutMapping("/v1/put")
    public Object put(String id){
        params.clear();
        params.put("id", id);
        return params;
    }


    @DeleteMapping("/v1/del")
    public Object del(String id){
        params.clear();
        params.put("id", id);
        return params;
    }
}

注解简介:  1、单一参数@RequestMapping(path = "/{id}", method = RequestMethod.GET)

   1) public String getUser(@PathVariable String id ) {}

   

   2)@RequestMapping(path = "/{depid}/{userid}", method = RequestMethod.GET) 可以同时指定多个提交方法

   getUser(@PathVariable("depid") String departmentID,@PathVariable("userid") String userid)


   3)get、post、put、delete四种注解的封装

   @GetMapping = @RequestMapping(method = RequestMethod.GET)

   @PostMapping = @RequestMapping(method = RequestMethod.POST)

   @PutMapping = @RequestMapping(method = RequestMethod.PUT)

   @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)


   4)@RequestParam(value = "name", required = true)

    可以设置默认值,可以设置别名name="",可以设置是否必传 requeid=true或false


   4)@RequestBody 请求体映射实体类,以json映射javaBean

    需要指定http头为 content-type为application/json charset=utf-8


   5)@RequestHeader 请求头,比如鉴权,可以获取请求头

    @RequestHeader("access_token") String accessToken


   6)HttpServletRequest request自动注入获取参数,可以拿到任何请求数据