IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 瑞吉外卖项目(二) -> 正文阅读

[JavaScript知识库]瑞吉外卖项目(二)

前端

JSON对象:
和JS对象区别:

JSON对象的属性名(key)必须被包含在双引号之中。
而JavaScript对象除了有空格的属性名、中间有连字符-的属性名必须在双引号之中外, 其它随意。
不能在JSON对象中定义方法, 而在JavaScript对象中可以。

JSON字符串:
在前端和后台之间传递数据可以使用JSON,但是实际上传递的是JSON字符串,而JSON对象是不可以直接进行传递的。
JSON字符串就是在JSON对象两边套上 ' 形成的字符串。

let JSONObject  = {"k1":"v1","k2":"v2"};			// JSON对象  
let JSONString  = '{"k1":"v1","k2":"v2"}';			// JSON字符串  

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;
}

在这里插入图片描述

/**
 * 对象转换器: 基于jackson将Java对象转为json, 或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为      [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为       [序列化Java对象到JSON]
 */
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)))
        // 序列化 响应 JSON 数据时, 改变下列类型的序列化类型
                .addSerializer(BigInteger.class, ToStringSerializer.instance)
                .addSerializer(Long.class, ToStringSerializer.instance) // 将 domain中Long类型的字段, 序列化为 JSON 时,序列化为 String
                .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 方法,扩展消息转换器。

    /**
     *  扩展 mvc 框架 的消息转换器
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器....");
        // 创建 消息转换器对象
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

        // 设置 对象转换器
        messageConverter.setObjectMapper(new JackSonObjectMapper());

        // 追加到 mvc 框架的转换器集合中, 并放到最前面优先使用
        converters.add(0,messageConverter);
    }

在这里插入图片描述

ThreadLocal

使用 SpringBoot 内嵌服务器时,如果启动之后,又修改了前端页面文件,需要后端重启服务器,前端清除浏览器缓存,这样才可以奏效。

ThreadLocal,是Thread的局部变量。
当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本。
所以每一个线程都可以独立地改变自己的副本,不会影响其他线程所对应的副本。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果。

/**
 *  基于 ThreadLocal 封装工具类
 */
public class BaseContext {

    // ThreadLocal 是线程隔离的
    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主键生成策略

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 16:49:40  更:2022-06-26 16:51:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:35:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码