Java项目笔记(一)

一、springboot控制台打印sql日志 ---------.mapper为你启动类扫描的mapper路径

logging.level.---------.mapper = debug

二、前端传到后台的json转换成java对象
json:代表的是前端定义的json字符串的变量名
ProductRecord.class:对应的是你想转换成的对象.class

 
        com.alibaba
        fastjson
        1.2.47
    


ProductRecord productRecord = JSON.parseObject(json, ProductRecord.class);

如果前端传的集合对象后台接收为string类型,解决办法:

public  ResponseState createOrder(Orders orders,
	@RequestParam(value = "listOrderProduct",required = true) String listOrderProduct){
    JSONArray arrayList= JSONArray.parseArray(listOrderProduct);   //把 string转成JSONArray对象。
    List list = JSONObject.parseArray(arrayList.toJSONString(),OrderProduct.class); //转化为你想要的对象list,OrderProduct为目标对象。
    return orderService.createOrder(orders,list);
}

三、解决前端传一个对象和一个json,后台接收为null

@RequestMapping里加一个produces="application/json; utf-8"

四、后台接收一个集合抛出异常java.lang.NoSuchMethodException: java.util.List.()
解决办法添加 @RequestParam(value=“list”,required=true) List list

五、for、foreach、Iterator不同数据结构遍历时间测试

基于链表结构的数据,数据增加到万级,for遍历的时间开始成倍数增长
LinkedList linkedList = new LinkedList();
    for (int i =0;i<10000;i++){
        linkedList.add(i);
    }
    
基于数组格式的数据,数据添加到百万级,三者遍历时间并无明显区别
 ArrayList linkedList = new ArrayList();
    for (int i =0;i<1000000;i++){
        linkedList.add(i);
    }
    
foreach和Iterator相比,两种数据格式遍历时间无明显差别

六、springboot全局日期格式化配置

#jackson相关配置
spring.jackson.date-format = yyyy-MM-dd HH:mm:ss
#时区必须要设置
spring.jackson.time-zone= GMT+8
#ALWAYS的意思是即时属性为null,仍然也会输出这个key,对应yml里面的注释里面的类型
spring.jackson.default-property-inclusion=ALWAYS

七、接口测试时发现一个问题,两个实体类有继承关系,其中一个实体类有list集合。此时接口还需要传一个list集合,如果这两个list集合变量名重名,当你在遍历该参数list集合时无论集合中有多少条数据,发现list.size总是等于2,此时list中的数据被当成一条数据保存到数据库里并且循环两次!解决办法,就是更改变量名,防止重名

八、集合Swagger的时候:报错栈溢出,原因可能是代码和swagger冲突导致了无限递归
(1)、不要在接口中的参数中引用实体类,尽量用json。
(2)、代码逻辑中尽量不要 多层 集合嵌套集合。
解决办法 :注释掉启动类的@EnableSwagger2,让我改代码逻辑还是算了吧

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is com.google.common.util.concurrent.ExecutionError: java.lang.StackOverflowError

java.lang.StackOverflowError
抛出该异常的原因:Jvm线程请求的栈深度大于虚拟机所允许的深度

九、捕获异常

package rongheng.member.controller;

import org.apache.shiro.authz.UnauthorizedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import rongheng.member.entity.ResponseState;

import javax.servlet.http.HttpServletRequest;

@ControllerAdvice
public class GlobalDefaultExceptionHandler{
	/**
	 * @RequiresPermissions("user:updateSysUser") 捕获无权限异常
	 * @param req
	 * @param e
	 * @return
	 */
	 @ExceptionHandler(UnauthorizedException.class)
     @ResponseBody
     public Object defaultExceptionHandler(HttpServletRequest req,Exception e){
		 ResponseState responseState = new ResponseState();
		 responseState.setState("403");
		 responseState.setMsg("对不起,暂无权限!");
		return responseState;
     }
}

十、springboot热部署

#设置开启热部署
spring.devtools.restart.enabled=true
#页面不加载缓存,修改即使生效
spring.freemarker.cache=false


    
        org.springframework.boot
        spring-boot-devtools
        true
        true
    
    
 
        vip
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
                
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                    true
                
            
        
    

你可能感兴趣的:(springboot,Java)