VO: 表现层对象(View Object),主要对应展示界面显示的数据对象,用一个VO对象来封装整个界面展示所需要的对象数据,数据脱敏,去掉用户隐私数据。
VO:View Object,视图层,其作用是将指定页面的展示数据封装起来。

model:用于接收数据库中的数据,通过mybatis 的ORM对象关系映射来获取数据

IDType

AUTO 数据库ID自增
INPUT 用户输入ID
ID_WORKER 全局唯一ID,Long类型的主键
ID_WORKER_STR 字符串全局唯一ID
UUID 全局唯一ID,UUID类型的主键
NONE 该类型为未设置主键类型

这个是在yml文件中定义的全局配置

field-strategy:

IGNORED (忽略 如果字段是null,就用null更新)
not_null (不为null, 当字段是null时,就忽略这个字段的更新)
not_empty (不为null和‘’, 当字段是null或者是空时,忽略这个字段的更新)

设置map-underscore-to-camel-case属性为true来开启驼峰功能

2.使用Mybatis时,如果查询语句中某些字段值是null的,则这个字段就无法返回。对于后台数据处理来说,这是一个致命的问题,于是通过修改Mybatis的配置来解决这个问题。
在springmvc下,在mybatis的配置文件里面增加以下配置即可:
mybatis.configuration.call-setters-on-nulls=true

calc() 函数用于动态计算长度值。

width: calc(100% - 100px);

contents()

contents() 方法返回所有直接子元素,包括被选元素的文本和注释节点。
contents() 方法也能访问 iframe 的 HTML。

box-sizing:content-box

当我们设置 box-sizing: content-box; 时,浏览器对盒模型的解释遵从我们之前认识到的 W3C 标准,当它定义width和height时,它的宽度不包括border和padding。

iframe标签的属性

align:left、right、top、middle、bottom。用于规定如何根据周围的元素来对齐此框架。不赞成使用。请使用样式代替。

frameborder:1、0。用于规定是否显示框架周围的边框。

height:pixels、%。用于规定iframe的高度。

longdesc:URL。规定一个页面,该页面包含了有关iframe的较长描述。

marginheight:pixels。定义iframe的顶部和底部的边距。

marginwidth:pixels。定义iframe的左侧和右侧的边距。

name:frame_name。规定iframe的名称。

scrolling:yes、no、auto。规定是否在iframe中显示滚动条。

src:URL。规定在iframe中显示的文档的URL。

width:pixels。%。定义iframe的宽度。

this,that的用法

$(‘#conten').click(function(){
//this是被点击的#conten
var that = this;
$(.conten').each(function(){
//this是.conten循环中当前的对象
//that仍然是刚才被点击的#conten
});
});

this对象在程序中随时会改变,而var that=this之后,that没改变之前仍然是指向当时的this,这样就不会出现找不到原来的对象。

window.setInterval(“reinitIframe()”, 200);

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

justify-content 属性

justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。

CSS object-fit 属性

对图片进行剪切,保留原始比例:
object-fit 属性指定元素的内容应该如何去适应指定容器的高度与宽度。

object-fit 一般用于 img 和 video 标签,一般可以对这些元素进行保留原始比例的剪切、缩放或者直接进行拉伸等。
fill 默认,不保证保持原有的比例,内容拉伸填充整个内容容器。
contain 保持原有尺寸比例。内容被缩放。
cover 保持原有尺寸比例。但部分内容可能被剪切。
none 保留原有元素内容的长度和宽度,也就是说内容不会被重置。
scale-down 保持原有尺寸比例。内容的尺寸与 none 或 contain 中的一个相同,取决于它们两个之间谁得到的对象尺寸会更小一些。
initial 设置为默认值,关于 initial

注解

@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
注意在使用@NotBlank等注解时,一定要和@valid一起使用,不然@NotBlank不起作用

public class demo{
    @NotNull(message="用户id不能为空")
    private Long userId;
    @NotBlank(message="用户名不能为空")
    private String userName;
    @NotBlank(message="年龄不能为空")
    private String age;
}

@PostMapping("/xxx")
public String createDemo(@RequestBody @Valid Demo demo, BindingResult result){
    if(result.hasErrors())
        return result.getFieldError().getDefaultMessage();
    return "sucess";
}

@Accessors(chain = true)注解

这个注解是来自与Lombok里的,具体的作用是开启链式编程,让我们写代码更加方便。
翻译是存取器。通过该注解可以控制getter和setter方法的形式。
fluent 若为true,则getter和setter方法的方法名都是属性名,且setter方法返回当前对象。

@EqualsAndHashCode(callSuper = true)

该注解用于子类对象之间进行比较的时候
不加该注解的影响:子类对象属性值一致,但其继承的父类对象属性值不一致,在比较的时候会出现比较结果不对的情况。

Spring注解之@validated的使用

spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。
比如,我们判断一个输入参数是否合法,可以用如下方式

@Slf4j

@Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解,如果不写下面这段代码,并且想用log

@component (把普通pojo实例化到spring容器中,相当于配置文件中的

<bean id="" class=""/>

@ConfigurationProperties会根据配置文件的信息调用声明对象的set方法

@ResponseStatus注解作用

@ResponseStatus注解有两种用法,一种是加载自定义异常类上,一种是加在目标方法中

这里我们说一下加在目标方法上的这种情况,注解中有两个参数,value属性设置异常的状态码,reaseon是异常的描述,

需要重点注意的是不管该方法是不是发生了异常,将@ResponseStatus注解加在目标方法上,一定会抛出异常。但是如果没有发生异常的话方法会正常执行完毕。

@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度
@ControllerAdvice:异常集中处理,更好的使业务逻辑与异常处理剥离开;其是对Controller层进行拦截
@ResponseStatus:可以将某种异常映射为HTTP状态码

IllegalArgumentException不合法的参数异常
expiration.before(new Date())判断当前日期是否在过期日期之前。

isAccessAllowed:判断是否登录
在登录的情况下会走此方法,此方法返回true直接访问控制器
onAccessDenied:是否是拒绝登录
没有登录的情况下会走此方法
如果isAccessAllowed方法返回True,则不会再调用onAccessDenied方法,如果isAccessAllowed方法返回Flase,则会继续调用onAccessDenied方法。而onAccessDenied方法里面则是具体执行登陆的地方。由于我们已经登陆,所以此方法就会返回True(filter放行),所以上面的onPreHandle方法里面的onAccessDenied方法就不会被执行。

Assert 类中的常用断言方法:

notNull(Object object)
  当 object 不为 null 时抛出异常,notNull(Object object, String message) 方法允许您通过 message 定制异常信息。和 notNull() 方法断言规则相反的方法是 isNull(Object object)/isNull(Object object, String message),它要求入参一定是 null;
isTrue(boolean expression) / isTrue(boolean expression, String message)
  当 expression 不为 true 抛出异常;
notEmpty(Collection collection) / notEmpty(Collection collection, String message)
  当集合未包含元素时抛出异常。
  notEmpty(Map map) / notEmpty(Map map, String message) 和 notEmpty(Object[] array, String message) / notEmpty(Object[] array, String message) 分别对 Map 和 Object[] 类型的入参进行判断;
hasLength(String text) / hasLength(String text, String message)
  当 text 为 null 或长度为 0 时抛出异常;
hasText(String text) / hasText(String text, String message)
  text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;
isInstanceOf(Class clazz, Object obj) / isInstanceOf(Class type, Object obj, String message)
  如果 obj 不能被正确造型为 clazz 指定的类将抛出异常;
isAssignable(Class superType, Class subType) / isAssignable(Class superType, Class subType, String message)
  subType 必须可以按类型匹配于 superType,否则将抛出异常;

@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值

Spring注解之@validated的使用
spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。
比如,我们判断一个输入参数是否合法,可以用如下方式

longValue()是Long类的一个方法,用来得到Long类中的数值。

router.replace
跳转登录页
携带当前页面路由,以在登录页面完成登录后返回当前页面

router.replace({
        path: '/login',        
        query: {
            redirect: router.currentRoute.fullPath
        }
    });

Content-Type: application/json : 请求体中的数据会以json字符串的形式发送到后端
Content-Type: application/x-www-form-urlencoded:请求体中的数据会以普通表单形式(键值对)发送到后端
Content-Type: multipart/form-data: 它会将请求体的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。

URLSearchParams

URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。

最近一直有用到解析各种数据,主要是用FastJson进行数据解析,其中一个重要的类为JSONObject,今天有时间,所以进行总结一下:

JSONobject

是FastJson提供的对象,在api中是用一个私有的常量map进行封装的,实际就是一个map,只不过FastJson对其进行了封装,

添加了很多方便快捷的属性方法。

private final Map<String, Object> map;
在项目中添加maven依赖

     <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.48</version>
        </dependency>

先来看下它有哪些常用方法,以及有什么作用:

1.put(String key, Object value)方法,在JSONObject对象中设置键值对在,在进行设值得时候,key是唯一的,如果用相同的key不断设值得时候,保留后面的值。

2.Object get(String key) :根据key值获取JSONObject对象中对应的value值,获取到的值是Object类型,需要手动转化为需要的数据类型

3.int size():获取JSONObject对象中键值对的数量

4.boolean isEmpty():判断该JSONObject对象是否为空

5.containsKey(Object key):判断是否有需要的key值

6.boolean containsValue(Object value):判断是否有需要的value值

7.JSONObject getJSONObject(String key):如果JSONObjct对象中的value是一个JSONObject对象,即根据key获取对应的JSONObject对象;

8.JSONArray getJSONArray(String key) :如果JSONObject对象中的value是一个JSONObject数组,既根据key获取对应的JSONObject数组;

9.Object remove(Object key):根据key清除某一个键值对。

由于JSONObject是一个map,它还具有map特有的两个方法:

10.Set<String> keySet() :获取JSONObject中的key,并将其放入Set集合中

11.Set<Map.Entry<String, Object>> entrySet():在循环遍历时使用,取得是键和值的映射关系,Entry就是Map接口中的内部接口

与String字符串转换:

12.toJSONString() /toString():将JSONObject对象转换为json的字符串

position:absolute相对哪个元素定位
生成绝对定位的元素,相对于static定位以外的第一个父元素进行定位。
元素默认的定位值是static,所以往上找参照元素一直到根元素了。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐