Web入门-Springboot初体验

这里教程直接教学Springboot而跳过了ssm,为了先着手开发所以决定后期再补一下springmvc的内容,先跟着教程走,到后面做“元集”时如果用到边做边学,(make it work first)。

本篇是一些零散的入门web知识:

1 Maven

JavaWeb开发常用maven来进行管理。此处按照视频所说规定,之后的java都统一使用11版本的JDK,和Maven协同。

Maven需单独安装,配合IDEA使用。

Maven的作用:

  • 依赖管理,(jar包),避免版本冲突问题
  • 提供标准、统一的项目结构,如下:
    • src下:
    • main: —实际项目资源
      • java —java源代码目录
      • resources —配置文件目录
    • test —测试项目资源
      • java
      • resources
    • pom.xml —项目配置文件
  • 自动化项目构建:编译、测试、打包、发布

注:此处为简单的maven使用,后期还有高级用法

2 HTTP

基于TCP

基于请求:一次请求对应一次响应

2.1 请求协议

请求行:

请求数据的第一行:请求方式(GET、POST),资源路径,协议

  • 请求方式 – GET: 请求参数在请求行中,没有请求体,如: /brand/findAll?name=OPPO&status=1。GET 请求大小是有限制的
  • 请求方式 – POST: 请求参数在请求体中,POST 请求大小是没有限制的

请求头:

第二行开始,格式 key:value

请求体:

POST请求,存放请求参数

2.2 相应协议

相应行:

相应数据第一行:协议,状态码,描述

常用状态码:

  • 200 OK:处理成功
  • 404 Not Found:请求资源不存在
  • 502 Internal Server Error:服务器发生不可预期的错误:

响应头:

第二行开始,格式 key:value

响应体:

最后一部分,存放响应数据

2.3 解析协议

无视,框架\web服务器软件 会实现。

3 Tomcat

轻量级web应用服务器,封装了对HTTP协议数据的操作。被整合进Springboot。

4 请求

此处使用apifox作为接口测试工具。

4.1 简单参数

1.原始方法获取请求参数:

  • Controller方法形参中声明HttpServletRequest对象
  • 调用对象的getParameter(参数名)
@RestController
public class exercise1 {
    //原始方式
    @RequestMapping("/exercise1")
    public String simpleParam(HttpServletRequest request){
        String name= request.getParameter("name");
        String ageStr = request.getParameter("age");
        int age = Integer.parseInt(ageStr);
        System.out.println(name+"--"+age);
        return "OK";
    }
}

2.Springboot方式:

  • 请求名与方法形参变量名相同
  • 会自动进行类型转换
@RestController
public class exercise1 {
    //Springboot方式
    @RequestMapping("/exercise1")
    public String simpleParam(String name,Integer age){
        System.out.println(name+"--"+age);
        return "OK";
    }
}

3.@RequestParam注解

  • 方法形参名称与请求参数名称不匹配,通过该注解完成映射
  • 该注解的required属性默认是true,代表请求参数必须传递
@RestController
public class exercise1 {
    //Springboot方式
    @RequestMapping("/exercise1")
    public String simpleParam(@RequestParam(name = "name",required = false) String username, Integer age){
        System.out.println(username+"--"+age);
        return "OK";
    }
}

4.2 实体参数

简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可。

POJO:仅包含自身的属性以及自身属性的getter和setter方法。

@RestController
public class SimplePojo {
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OK";
    }
}   

复杂实体对象:有类的嵌套,在内部类的属性前加上“外部类名称.”

4.3 数组参数:

复选框多数时传递的是一个数组:

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

此处 请求url为:“http://localhost:8080/arrayParam?hobby=java&hobby=C++&hobby=Go”,而后端收不到“++”。

修改为“http://localhost:8080/arrayParam?hobby=java&hobby=C%2B%2B&hobby=Go”就正常了

4.4 集合参数:

  • 集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam 绑定参数关系
@RequestMapping("/arraylistParam")
    public String arrayParam(@RequestParam ArrayList<String> hobby){
        System.out.println(hobby);
        return "OK";
    }

4.5 日期时间类参数:

前端和后端需要统一传递格式。:@DateTimeFormat(pattren=”yyyy-MM-dd HH:mm:ss”)

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

4.6 JSON参数:

JSON参数:JSON参数键名于形参对象属性名相同,定义POJO类型形参即可接收参数,需要用@RequestBody 标识

JSON数据需要放在请求体中,所以使用POST方法而非GET,(raw)

{
    "name":"张三",
    "age":"18",
    "myinfo":{
        "info1":"INFO1111",
        "info2":"INFO2222"
    }
}
@RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user.toString());
        return "OK";
    }

4.7 路径参数:

参数成为了URL的一部分。

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

URL:http://localhost:8080/path/137

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

也可以多个:

URL:http://localhost:8080/path/137/123

@RequestMapping("/path/{id1}/{id2}")
public String pathVariableParam(@PathVariable Integer id1,@PathVariable Integer id2){
System.out.println(id1);
System.out.println(id2);
return "OK";
}

5 响应

@ResponseBody

  • 类型:方法注解、类注解
  • 位置:Controller方法上/类上
  • 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应
  • @RestController=@Controller+@ResponseBody;

统一响应结果:

统一响应结果旨在为系统不同功能模块、不同接口返回的数据格式设定一个统一的规范。

Result(code,meg,data)

Result.java:示例

public class Result {
    private Integer code ;//1 成功 , 0 失败
    private String msg; //提示信息
    private Object data; //数据 data

    public Result() {
    }
    public Result(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public Object getData() {
        return data;
    }
    public void setData(Object data) {
        this.data = data;
    }

    public static Result success(Object data){
        return new Result(1, "success", data);
    }
    public static Result success(){
        return new Result(1, "success", null);
    }
    public static Result error(String msg){
        return new Result(0, msg, null);
    }

    @Override
    public String toString() {
        return "Result{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}

应用示例:

需要提前引入dom4j依赖,引入工具类.

EmpController.java:

package org.example.springbootdemo.Controller;

import org.example.springbootdemo.Controller.Request.pojo.Result;
import org.example.springbootdemo.demos.web.Emp;
import org.example.springbootdemo.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class EmpController {
    @RequestMapping("/listEmp")
    public Result list(){

        //1.加载解析xml
        String file =this.getClass().getClassLoader().getResource("emp.xml").getFile();
        List<Emp> empList= XmlParserUtils.parse(file, Emp.class);

        //2.对数据进行转换
        empList.stream().forEach(emp -> {
            String gender= emp.getGender();
            if("1".equals(gender))
                emp.setGender("男");
            else
                emp.setGender("女");
        });

        empList.stream().forEach(emp->{
            String job= emp.getJob();
            if("1".equals(job))
                emp.setJob("讲师");
            else if("2".equals(job))
                emp.setJob("班主任");
            else
                emp.setJob("就业指导");
        });

        //3.响应
        return Result.success(empList);
    }
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇