第二次项目开发总结
一).前后端的数据交互统一使用json格式**
前端传递参数使用json格式,后台需要使用@RquestBody注解来接收json格式的
参数,并将json格式装换为java对象。
注意点:
1).在http协议中默认的数据传送格式为application/x-www-form-urlencode格式.
传送数据格式:
pageNum=1&pageSize=1&labelId=&assetNumber=0000
2).@RequestBody只能解析application/json类型的数据,不能解析key-value类
型的数据。
传递key-value的数据会报错:
"Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported"
传送数据格式:
{
"pageNum":"1",
"pageSize":"5",
"labelId":"",
"assetNumber":"0000"
}
3).使用@RquestParam注解可以解析application/form-data和application/x-
www-form-urlencode类型的数据
content-type = application/form-data,
传送数据格式:
Content-Disposition: form-data; name="pageNum"
1
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="pageNum"
1
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pageSize"
5
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="pageNum"
1
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pageSize"
5
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="labelId"
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="pageNum"
1
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="pageSize"
5
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="labelId"
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="assetNumber"
0000
------WebKitFormBoundary7MA4YWxkTrZu0gW--
4.Controller的方法中只能使用一个@RequestBody来获取参数。
二).@Validated和BindingResult的使用**
前台参数检验可以使用@validated注解来检验参数传入格式是否符合规范,通
过 BindingResult对象来获取错误信息,@Valiated配合BindingResult使用,
BindingResult要跟在@Valiated后边。
注意点:
1).使用@Valiated时,如果传入参数不符合符合规范,程序抛出异常,使用
BindingResult可以手动的处理异常,通过hasErrors()判断参数是否错误
hasErrors()返回一个boolean值。
if (bindingResult.hasErrors()) {
baseResponse.setCode(CommonConstants.FAILED_CODE);
baseResponse.setMsg(bindingResult.getFieldError().getDefaultMessage());
return baseResponse;
}
三).使用PostProSql数据库连接
参考:https://www.cnblogs.com/Auge/p/11819876.html
1).如何建表。
通过序列,设置表的id自增,通过创建函数,定义触发器,自动生成时间戳。
四).使用git协作 .iml文件不要提交到远程库中
五).idea安装LomBok插件,使用@Data注解
注意点:
1). 使用@Data注解,必须下载Lombok插件。
2).使用@Data注解,在编译源码时自动生成setter、getter、toString、
hashCode方法。
六).关于微服务的注册中心的问题
在团队开发中由项目负责人将注册服务注册到一个服务器上,开发人员使用同
一个注册中心服务地址,在本地电脑上运行程序,将各自模块的服务注册到
注册中心,实现服务的共享调用。
注册中心的作用:实现服务之间的调用。
七).微服务中使用浏览器访问单个服务的问题
前端与后台的访问,其实就是浏览器与服务器之间访问的问题。
我们在idea中开发程序,本地电脑就充当一个服务器,作为应用程序的运行
环境,每个服务之间通过端口号进行区分,浏览器访问资源时,通过服务器
地址(本地电脑地址 :locallhost/127.0.0.1)找到对应的应用程序入口,通
过端口号找到对应的服务。
例如:
标签模块端口号:20221
用户模块端口号:10221
http://localhost:20221/locationLabel/criteriaPage
http://localhost:10221/admin/user/userPage
八).微服务开发构建公共模块
使用微服务开发时,我们可以将其他模块都要使用到的类和方法等共同使用
的数据放在一个公共服务模块中,在各个模块中引入这个公共模块的maven
依赖,这样就实现了代码了复用,解决了代码的冗余问题。
九).请求资源时使用RestFul的url风格
RestFul的定义及使用
参考:https://blog.csdn.net/qq_38941937/article/details/89145283
https://blog.csdn.net/DingnanDean/article/details/79673708
restful: Representational Status Transfer (表现层状态转换)
添加一个用户:PostMapping ("/user")
删除一个用户:DeleteMaping("/user/{id}")
修改一个用户: PutMapping("/user/{id}")
查找一个用户:GetMapping("/user{id}")
通过请求的方式(post、delete、put、get)来区分请求的操作,实现
资源的定位。
十).条件分页查询和非条件查询在一定条件下可以使用同一个接口
可以封装一个分页查询对象,该对象包含pageNum,pageSize和查询条件。
构造查询sql语句时判断查询条件是否为空。
十一).打印异常信息
e.getMessage()
十二).批量删除内部抛出异常
在删除循环体中,若删除失败抛出new Exeception("异常描述"+删除异常的数
据id).