SpringBoot相关

为什么用SpringBoot? 答: (懒)

响应式webFlux

1
.....

SpringData是个好东西

1
对关系型数据库 nosql数据库 统一了操作, 方便, 基本能满足日常的所有需求

SpringDataJpa复杂查询

1
2
3
public interface Specification<T> {
Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb);
}

root: T对象
builder与query构造查询条件(基本sql语句都可以拆分用方法链式操作) 好长时间不用复杂查询忘了,以后补上

更加牛叉的结合 querydsl (不喜欢搞得太复杂)

FreeMarker (以前模板引擎只用过这一个,感觉比Thymeleaf舒服, 现在几乎不用了, 已经踏上了前后端分离的邪路)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<#include  ....> 引入公共部分

<#list xxx as item> 集合标签
${item.xxx}
</#list>

日期格式化
${item.birthday?string('yyyy-MM-dd')}

html内容转义: ${var?html}

boolean类型: ${var?string('yes','no')}

null空值处理: ${var!}或者${var!'我是默认值}

<#assign a=100>定义变量

map集合遍历:
<#list xxx?keys as key>
${key}----${xxx[key]}
</#list>

<#if var>100> // <#if var?exist>//如果存在输出 或与非逻辑运算符可以使用
....
<#else> <#elseif>
</#if>

switch条件分支:
<#switch xxx>
<#case ...>
...
<#break>
<#default>
...
<#switch>

字符串操作:
${var?substring(2,3)}
${xxxx?length}
${xxxx?upper_case}.....等等等

闪亮亮的JsonSerializer

对象转json时,自动指定对象的属性转换规则

  1. 原始情景

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @Data
    public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private Date date;

    public Student(Integer id, String name, Integer age, Date date) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.date = date;
    }

    public Student() {
    }
    }

    controller直接返回对象

    1
    2
    3
    4
    5
    @GetMapping("/test")
    public Student test() {
    Student student = new Student(10, "张三", 20, new Date());
    return student;
    }

    结果:

    1
    2
    3
    4
    5
    6
    {
    "id": 10,
    "name": "张三",
    "age": 20,
    "date": "2018-08-24T12:18:36.777+0000"
    }

    某些属性值并不符合要求, 例如图片url,日期,金额…等数据需要返回给前端固定的格式, 最好是配置属性的转换规则,由jackson自动处理

  2. 好用的注解 JsonSerialize
    定义好转换规则

    1
    2
    3
    4
    5
    6
    7
    8
    public class DateSerialize extends JsonSerializer<Date> {
    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
    SimpleDateFormat format =new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

    jsonGenerator.writeString(format.format(date));
    }
    }

    JsonSerializer:转换某个类型的属性, 重写serialize方法, 第一个参数值表示要转换的数据, 对数据处理完毕后通过jsonGenerator.writeXXX继续传递,大多数情况下都是处理json直接writeString就可以

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @Data
    public class Student {
    private Integer id;
    private String name;
    private Integer age;
    @JsonSerialize(using = DateSerialize.class)
    private Date date;

    public Student(Integer id, String name, Integer age, Date date) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.date = date;
    }

    public Student() {
    }
    }

    原有对象属性下声明使用哪个JsonSerializer处理, Controller无需改动还是直接返回对象

    1
    2
    3
    4
    5
    6
    {
    "id": 10,
    "name": "张三",
    "age": 20,
    "date": "2018年08月24日 20:31:10"
    }

    被serialize处理过的属性已经自动按指定格式生成json数据了

    前端时间戳转换

1
2
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

本文标题:SpringBoot相关

文章作者:啪啪啪的指针

发布时间:2018年08月24日 - 22:08

最后更新:2018年08月30日 - 11:08

原始链接:https://www.bootvue.com/2018/08/24/SpringBoot相关/

转载说明: 转载请保留原文链接及作者。