springboot项目初始话配置

全局序列化配置

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
package com.example.projectdemo.common;

import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Configuration
public class JacksonRuleCustomizerConfiguration {

@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return builder -> builder.serializerByType(Long.class, new ToStringSerializer())
.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter))
.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter))
.serializerByType(LocalDate.class, new LocalDateSerializer(dateFormatter))
.deserializerByType(LocalDate.class, new LocalDateDeserializer(dateFormatter))
;
}
}

全局跨域配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.example.projectdemo.common;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOrigins("*");
}
}

全局统一响应

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
package com.example.projectdemo.common;

import lombok.Data;

@Data
public class Result {
private int code;
private String msg;

private Object data;
public Result(int code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}

public static Result success(Object data) {
return new Result(200, "success", data);
}

public static Result success(String msg) {
return new Result(200, msg, null);
}

public static Result error(Object data) {
return new Result(500, "fail", data);
}

public static Result error(int code ,String msg) {
return new Result(code, msg, null);
}
public static Result error(String msg, Object data) {
return new Result(500, msg, data);
}
}

枚举类

轻量使用

通过单个枚举实现数据接收数据返回,数据库传递
entity类的字段类型为一个枚举

1
2
3
4
/**
* 状态
*/
private UserStatusEnum status;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 将枚举包装成json对象,处理响应
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@AllArgsConstructor
public enum UserStatusEnum{
OK(1, "正常"),
FREEZE(2, "冻结"),
DELETE(3, "删除");
@Getter
@JsonValue //json对象的值,响应需要返回的值
@EnumValue //mybatisplus 枚举值
private Integer value;
@Getter
private String name;
}

mapper中通过获取枚举的value

1
2
3
 <select id="listByStatus" resultType="com.example.projectdemo.entity.BladeUser">
select * from blade_user where status = #{status.value}
</select>

全局统一返回

基础注解

1
2
3
4
5
6
7
8
9
package com.example.projectdemo.entity.enume;

import com.baomidou.mybatisplus.annotation.IEnum;

import java.io.Serializable;

public interface BasicEnum extends IEnum<Integer>, Serializable {
String getName();
}

枚举常量

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
package com.example.projectdemo.entity;

import com.example.projectdemo.entity.enume.BasicEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;

public interface EnumConstant {
@AllArgsConstructor
enum UserStatusEnum implements BasicEnum {
OK(1, "正常"),
FREEZE(2, "冻结"),
DELETE(3, "删除");
@Getter
private Integer value;
@Getter
private String name;

}

@AllArgsConstructor
enum UserSexEnum implements BasicEnum{
MAN(1, "男"),
WOMEN(2, "女");
@Getter
private Integer value;
@Getter
private String name;
}
}

枚举解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.example.projectdemo.common;

import com.example.projectdemo.entity.enume.BasicEnum;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

public class EnumSerializer extends JsonSerializer<BasicEnum> {

@Override
public void serialize(BasicEnum basicEnum, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
// 将枚举值写入
jsonGenerator.writeNumber(basicEnum.getValue());
// 获取当前字段名
String currentName = serializerProvider.getGenerator().getOutputContext().getCurrentName();
// 设置枚举值的名称
jsonGenerator.writeStringField(currentName+"DictText", basicEnum.getName());
}
}