2 min read

Springboot入门

spring boot入门
Springboot入门

使用@SpringBootApplication注解

使用@SpringBootApplication等同于启用了下面三个注解:

@EnableAutoConfiguration: enable Spring Boot’s auto-configuration mechanism
@ComponentScan: enable @Component scan on the package where the application is located (see the best practices)
@Configuration: allow to register extra beans in the context or import additional configuration classes
下面是例子

package com.example.myapplication;

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

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

请求参数

简单参数

原始方法

  • Controller 方法形参中声明 HttpServletRequest 对象
  • 调用对象的 getParameter(参数名)

@RequestParam 注解

  • 方法形参名称和请求参数名称不匹配时,通过跟注解完成映射
  • 该注解的 required 属性默认是 true, 代表请求参数必须传递

@RestController
public class RequestController {
    @RequestMapping("/request")
    public String requestContorller(HttpServletRequest request) {
        String name = request.getParameter("name");
        String ageStr = request.getParameter("age");
        int age = Integer.parseInt(ageStr);
        System.out.println("request");
        return "OK";
    }
}

Spring 方法

  • 请求参数名与方法形参名相同
  • 会自动进行类型转换

@RequestMapping("/simpleParam")
public String simpleParamContorller(String name, Integer age) {
    System.out.println(name + ": " + age);
    return "OK";
}

@RequestParam 注解


@RequestMapping("/requestParam")
public String simpleParamContorller(@RequestParam(
        name = "name",
        required = false
) String userName, Integer age) {
    System.out.println(userName + ": " + age);
    return "OK" + "  " + userName + " " + age;
}

实体参数

传递实体类, 定义 POJO(Plain Old Java Object)接受即可
请求的参数名与方法的形参名保持一致


@RequestMapping("pojo")
public String POJOController(User user) {
    System.out.println(user);
    return "OK";
}

class User {
    String name;
    int age;
}

复杂实体对象,按照对象嵌套关系依次传递

数组集合参数

请求参数名与形参名相同且多个,定义数组类型即可接收参数


@RequestMapping("/arrayParam")
public String arrayController(String[] array) {
    System.out.println(Arrays.toString(array));
    return "OK";
}

集合参数


@RequestMapping("/listParam")
public String arrayController(@RequestParam List<String> list) {
    System.out.println(list);
    return "OK";
}

日期参数


@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime dateTime) {
    System.out.println(dateTime);
    return "OK";
}

Json 参数

定义实体类接收json


@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user) {
    System.out.println(user);
    return "OK";
}

class User {
    String name;
    int age;
    String country;
    String lang;
}

postman中使用 Body->raw->json 发起请求

{
  "name": "yue",
  "age": 25,
  "country": "CN",
  "lang": "zh-cn"
}

路径参数

通过请求url直接传递参数, 通过{...}来标识该路径参数, 需要使用@PathVariable获取路径参数

{...}中的参数名必须与方法的形参名保持一致

@RequestMapping("/path/{id}/{name}")
    public String pathParam(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id +" "+ name);
        return "OK";
    }