前端
JSON对象: 和JS对象区别:
JSON对象的属性名(key)必须被包含在双引号之中。
而JavaScript对象除了有空格的属性名、中间有连字符-的属性名必须在双引号之中外, 其它随意。
不能在JSON对象中定义方法, 而在JavaScript对象中可以。
JSON字符串: 在前端和后台之间传递数据可以使用JSON,但是实际上传递的是JSON字符串,而JSON对象是不可以直接进行传递的。 JSON字符串就是在JSON对象两边套上 ' 形成的字符串。
let JSONObject = {"k1":"v1","k2":"v2"};
let JSONString = '{"k1":"v1","k2":"v2"}';
JSON.parse :将JSON字符串 转换为 JS对象。 JSON.stringify :将JSON对象 转换为 JSON 字符串。 computed:计算属性 this.$refs[formName].validate: < template slot-scope=“scope” >
响应JSON数据自定义序列化类型
封装响应数据的实体类
@Data
public class employee implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String username;
private String name;
private String password;
private String phone;
private String sex;
private String id_number;
private Integer status;
private LocalDateTime create_time;
private LocalDateTime update_time;
private Long create_user;
private Long update_user;
}
public class JackSonObjectMapper extends ObjectMapper{
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
public JackSonObjectMapper() {
super();
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
this.getDeserializationConfig().withoutFeatures(FAIL_ON_UNKNOWN_PROPERTIES);
SimpleModule simpleModule = new SimpleModule()
.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
.addSerializer(BigInteger.class, ToStringSerializer.instance)
.addSerializer(Long.class, ToStringSerializer.instance)
.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
this.registerModule(simpleModule);
}
}
在 WebMvcConfig 配置类中,复写 extendMessageConverters 方法,扩展消息转换器。
@Override
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
log.info("扩展消息转换器....");
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
messageConverter.setObjectMapper(new JackSonObjectMapper());
converters.add(0,messageConverter);
}
ThreadLocal
使用 SpringBoot 内嵌服务器时,如果启动之后,又修改了前端页面文件,需要后端重启服务器,前端清除浏览器缓存,这样才可以奏效。
ThreadLocal,是Thread的局部变量。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本。 所以每一个线程都可以独立地改变自己的副本,不会影响其他线程所对应的副本。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果。
public class BaseContext {
private static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
public static void setCurrentId(Long id){
threadLocal.set(id);
}
public static Long getCurrentId(){
return threadLocal.get();
}
}
Long empId = (Long) request.getSession().getAttribute("employee");
BaseContext.setCurrentId(empId);
metaObject.setValue("updateUser",BaseContext.getCurrentId());
数据表主键
为什么数据表主键没有设置自增,后端在做插入的时候,也没有进行自动填充,设置默认值,但是却会得到一个值。 因为 mybatis-plus 对主键生成的默认策略是:ASSIGN_ID ,该策略会使用雪花算法自动生成主键 ID,主键类型为 Long 或 String。 Mybatis-plus主键生成策略
|