2019-04-11——DAY1
使用了Lombok的@Data注解之后的代码样式,我们可以看出来第二个图中我们省去了Get,Set 还有ToString方法等等的实现代码快,全部收敛成一个@Data注解,这样代码就整洁了很多。
image.png2019-04-12——DAY2
注解怎么用
image.png@ApiOperation(value = "用户信息列表",notes = "所有用户列表")
完成了简单增删查改代码编写,用了postman插件get和post测试,了解了一点注释怎么用,SwaggerUI生成接口文档。报了错,解决不了。。。┭┮﹏┭┮改不出来,很不明白。
2019-04-15——DAY3
@GetMapping("/list")
@ApiOperation(value = "用户信息列表",notes = "所有用户列表")
@ResponseBody
public DynamicBean selectAll(){
DynamicBean bean = new DynamicBean();
bean.put("uerList",userService.selectAll());
return bean;
}
要学一下常用的注解的用法
@ResponseBody的作用其实是将java对象转为json格式的数据。
DynamicBean,因为只需要返回数据,不需要返回视图,所以一般都用这个类,他继承自map,注意一下他的方法,用put放进去。
注意出现时间或某个字段为null的问题
这种时间为null,要么是格式有问题,要么是SQL、语句不对,我写了
select * from dg_user
不行,要写全
select id,name,create_time createTime,modify_time modifyTime from dg_user
才能查到时间,因为id和name可以和user类里面定义的变量名一样,而两个时间定义的名字不一样了。。所以不行。
下午写了一个文件上传的controller。。过程艰辛(不过全程自己查百度,哎他们太忙了)
文件上传:MultipartFile 通过 MultipartFile .transferTo( new File()), 仅需要这步骤,就可以把图片存到服务器所在的电脑的任意一个盘或者路径里面。
MultipartFile需要配置,于是写了一个springmvc.xml里面贴上了
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="209715200"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>
主要是配置最大文件单个和总共不能超过多大等等等
image.png
其中,@controller:
在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。
一开始没有写get的请求方法,就报错了,说啥啥的,我就查到他先是查get的巴拉巴拉就,于是可以从get的return到post、上就可以了。
分隔符“/”"", 统一使用了 File.seperator() 来代替
还有一直传不上去文件,因为
这里没有写 file
image.png
这是因为:在上传文件的时候指定的key与@RequestParam中要求的不一致,导致了后台不能获取到上传的文件。
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上。
就这样吧 ,明天再写
2019-04-16 DAY4
接收请求参数的方式:3种 包括@RequestParam的用法
@RequestParam(value="username") String userName, @RequestParam(value="usernick") String userNick //value中的参数名称要跟name中参数名称一致
String username, String usernick// 此时要参数名称一致
HttpServletRequest request //request.getParameter("usernick")
@RequestBody:处理HttpEntity传递过来的数据,一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据。
@RequestBody注解可以接收json格式的数据,并将其转换成对应的数据类型。
GET请求中,因为没有HttpEntity,所以@RequestBody并不适用。
POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。
@RequestBody用于post请求,不能用于get请求
这里涉及到使用@RequestBody接收不同的对象
- 创建一个新的entity,将两个entity都进去。这是最简单的,但是不够“优雅”。
- 用Map<String, Object>接受request body,自己反序列化到各个entity中。
-
类似方法2,不过更为generic,实现自己的HandlerMethodArgumentResolver。
image.png
@ModelAttribute注解类型将参数绑定到Model对象
image.png当前台界面使用GET或POST方式提交数据时,数据编码格式由请求头的ContentType指定。分为以下几种情况:
- application/x-www-form-urlencoded,这种情况的数据@RequestParam、@ModelAttribute可以处理,@RequestBody也可以处理。
- multipart/form-data,@RequestBody不能处理这种格式的数据。(form表单里面有文件上传时,必须要指定enctype属性值为multipart/form-data,意思是以二进制流的形式传输文件。)
- application/json、application/xml等格式的数据,必须使用@RequestBody来处理。
@RequestParam get和post传值都可以
@RequestBody @ModelAttribute 只能post传值
@ResponseBody:直接返回 json 数据。不会跳转
在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
类似:一般就用DynamicBean 只返回json (不返回view的话,不用modelandview)
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
@ResponseBody
public DynamicBean selectAll(){
DynamicBean bean = new DynamicBean();
bean.put("uerList",userService.selectAll());
return bean;
}
@PathVariable
@RequestMapping("/users/{username}")
@ResponseBody
public String userProfile(@PathVariable("username") String username){
// return String.format("user %s", username);
return "user" + username;
}
初步认识JWT
下列场景中使用JSON Web Token是很有用的:
Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。
Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens无疑是一种很好的方式。因为JWTs可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。
基于token机制的身份认证
使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。大概的流程:
客户端使用用户名和密码请求登录。服务端收到请求,验证用户名和密码。验证成功后,服务端会生成一个token,然后把这个token发送给客户端。客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。客户端每次向服务端发送请求的时候都需要带上服务端发给的token。服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。
https://blog.csdn.net/daimengs/article/details/81088172
2019-04-18 DAY5
(新的一天新的发现,我买了一个电脑支架,用起来好爽!bang!这台电脑的触摸板真的烂的一批。
好了,刚刚又去问了一下善良的某某哥。)
1、了解了项目之间怎么跳来跳去。2、还有sql语句还可以,直接用方法。下面是举例子。
image.png在authcontroller中去屌merchantclient服务中的这个方法,我们可以通过按住ctrl键跳到
image.png
这个服务的接口(因为是微服务?)然后通过这个路径,按两下shrift,查找这个服务下的这个接口。
image.png image.png image.png
具体实现就在这个位置。↑
(刚刚解决了qq截图热键冲突,谁能想到是网易云呢。。)
image.png
类似这种sql方法。
怎么找路径
image.png image.pngUUID.randomUUID().toString() 的作用:java-生成唯一的序列
UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法。
UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,是由一个十六位的数字组成,表现出来的 形式。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不 同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。
image.png
在java中String一个String类型的可变长度的数组,固定长度的数组是String[] str={};这样写,可变的就String... str.
select(String... fields) fields是字段的意思
睡了15min。。还是很困很困,感觉直接看项目代码好吃力,看不懂,注释很少,啊啊啊,这样感觉进步不大。
好无聊,我要无聊死了,无聊无聊,为神马不下大雨,好热好热啊啊啊啊啊 好无聊啊呜呜呜呜想吃好吃的,天哪我再也不要点轻食了,不好吃不好吃,鸡肉不知道怎么做的,这么难吃也是服了。嘟嘟嘟嘟嘟嘟嘟嘟嘟他们工作都不用休息一下的吗
网友评论