隐藏

Java开发中常见问题的解决方法,记录一下
2024年 03月 16 日

Calvin

1.时间相关

1.1:时间格式转换
Date date = new Date();
//获取当前时间
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将格式从时间戳改为常用显示格式
System.out.println(dateFormat.format(date));

#注意:千万要注意格式代码,不能写成 ‘YYYY-MM-dd’ 因为YYYY是基于周来计算年的,它指向当天所在周属于的年份,一周从周日开始算起,周六结束,只要本周跨年,那么这一周就算下一年的了。正确姿势是使用yyyy格式。 
1.2:时间/json互转错误:

error示例JSON parse error: Cannot deserialize value of type java.util.Date

在实体类的时间属性上添加下面的注解,格式化日期。

@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")

2:文件相关:

2.1:各文件操作工具类的拷贝相关方法速度对比:

链接:this is url

2.2 在文件内写入后一定要关闭输入流,否则文件会变成空
writer.write(str);
//如果不手动刷新缓存并且关闭流,很可能文件内容为空
writer.flush();
writer.close();

3:bigDecimal

3.1:bigDecimal长度太长,返回给前端,精度会丢失,即后几位都会变成0

解决办法:给前端返回字符串类型。
加注解: @JsonSerialize(using = ToStringSerializer.class)

//示例:
  @JsonSerialize(using = ToStringSerializer.class)
  private BigDecimal id;
3.2:使用 BigDecimal 表示和计算浮点数,必须使用字符串的构造方法来初始化 BigDecimal,否则数据会出错,正确示例:
System.out.println(new BigDecimal("0.2").add(new BigDecimal("0.1")));
System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("0.4")));
System.out.println(new BigDecimal("4.22").multiply(new BigDecimal("300")));
System.out.println(new BigDecimal("222.2").divide(new BigDecimal("200")));

4.mybatis:

4.1.mybatis的update方法,当向某个字段塞入空值时,默认会不做操作(略过该字段),但业务逻辑上我们恰恰需要更新这个字段为空,这时就可以在对应字段的实体类里给该字段加个:
    //让mybatisplus可更新值为空
    @TableField(fill = FieldFill.INSERT_UPDATE)

5.feign相关

5.1:feign调用时@SpringQueryMap不解析父类参数的解决办法

添加feign配置类

@Configuration
public class FeignConfiguration {
 
    @Bean
    Logger.Level feignLoggerLevel() {
        //这里记录所有,根据实际情况选择合适的日志level
        return Logger.Level.FULL;
    }
 
    /**
     * @Description 替换解析queryMap的类,实现父类中变量的映射
     */
    @Bean
    public Feign.Builder feignBuilder() {
        return Feign.builder()
                .queryMapEncoder(new BeanQueryMapEncoder())
                .retryer(Retryer.NEVER_RETRY);
    }
}
 然后在FeignClient上去配置即可。
@FeignClient(value = "springcloudapi",configuration = FeignConfiguration.class)
public interface FeignVodService {

}

Java开发中常见问题的解决方法,记录一下

1.时间相关

1.1:时间格式转换
Date date = new Date();
//获取当前时间
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将格式从时间戳改为常用显示格式
System.out.println(dateFormat.format(date));

#注意:千万要注意格式代码,不能写成 ‘YYYY-MM-dd’ 因为YYYY是基于周来计算年的,它指向当天所在周属于的年份,一周从周日开始算起,周六结束,只要本周跨年,那么这一周就算下一年的了。正确姿势是使用yyyy格式。 
1.2:时间/json互转错误:

error示例JSON parse error: Cannot deserialize value of type java.util.Date

在实体类的时间属性上添加下面的注解,格式化日期。

@JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")

2:文件相关:

2.1:各文件操作工具类的拷贝相关方法速度对比:

链接:this is url

2.2 在文件内写入后一定要关闭输入流,否则文件会变成空
writer.write(str);
//如果不手动刷新缓存并且关闭流,很可能文件内容为空
writer.flush();
writer.close();

3:bigDecimal

3.1:bigDecimal长度太长,返回给前端,精度会丢失,即后几位都会变成0

解决办法:给前端返回字符串类型。
加注解: @JsonSerialize(using = ToStringSerializer.class)

//示例:
  @JsonSerialize(using = ToStringSerializer.class)
  private BigDecimal id;
3.2:使用 BigDecimal 表示和计算浮点数,必须使用字符串的构造方法来初始化 BigDecimal,否则数据会出错,正确示例:
System.out.println(new BigDecimal("0.2").add(new BigDecimal("0.1")));
System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("0.4")));
System.out.println(new BigDecimal("4.22").multiply(new BigDecimal("300")));
System.out.println(new BigDecimal("222.2").divide(new BigDecimal("200")));

4.mybatis:

4.1.mybatis的update方法,当向某个字段塞入空值时,默认会不做操作(略过该字段),但业务逻辑上我们恰恰需要更新这个字段为空,这时就可以在对应字段的实体类里给该字段加个:
    //让mybatisplus可更新值为空
    @TableField(fill = FieldFill.INSERT_UPDATE)

5.feign相关

5.1:feign调用时@SpringQueryMap不解析父类参数的解决办法

添加feign配置类

@Configuration
public class FeignConfiguration {
 
    @Bean
    Logger.Level feignLoggerLevel() {
        //这里记录所有,根据实际情况选择合适的日志level
        return Logger.Level.FULL;
    }
 
    /**
     * @Description 替换解析queryMap的类,实现父类中变量的映射
     */
    @Bean
    public Feign.Builder feignBuilder() {
        return Feign.builder()
                .queryMapEncoder(new BeanQueryMapEncoder())
                .retryer(Retryer.NEVER_RETRY);
    }
}
 然后在FeignClient上去配置即可。
@FeignClient(value = "springcloudapi",configuration = FeignConfiguration.class)
public interface FeignVodService {

}

版权属于:Calvin 所有,采用《知识共享署名许可协议》进行许可,转载请注明文章来源。

本文链接: https://www.chen.click/archives/212/

评论区(暂无评论)

这里空空如也,快来评论吧~

我要评论