本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》作者 公众号:山峯草堂,非技术多篇文章,专注于天道酬勤的 Java 开发问题、中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 转载说明:务必注明来源(注明:作者:王文峰哦)
写DA-SPIDER项目遇到的一些报错,SpringCloud,异常问题,随笔~
一、关于java.util.LinkedHashMap cannot be cast to 实体类…问题的出现以及解决办法
解决方案:
restTemplate.getForObject()以String类型接受,也即接受的是一个json字符串
String json = restTemplate.getForObject("http://SPRINGCLOUD-EMPLOYEE-PROVIDER/emp/list",
String.class);
再使用阿里巴巴的fastjson将json字符串转变成list集合
List<EmployeeModel> employeeModels = JSON.parseArray(json, EmployeeModel.class);
现在就是一个正常的List集合了,可以遍历之类的操作
二、ObjectMapper的简单使用
简单介绍 ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)是Jackson的主要类,它可以帮助我们快速的进行各个类型和Json类型的相互转换。 常用方法:
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Hyl\", \"age\":20}";
Student student = mapper.readValue(jsonString, Student.class);
System.out.println(student);
jsonString = mapper.writeValueAsString(student);
System.out.println(jsonString);
结果:
Student [ name: Hyl, age: 20 ]
{
"name" : "Hyl",
"age" : 20
}
三、Cannot deserialize value of type java.util.Date from String “2021-08-21T07:25:20.000Z“
解决方案: 大体意思是说 前台向后台发起请求时,DateTimeFormat 接收到的前台参数为String,无法将String转变为Date 修改 vo层代码:
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd'T'HH:mm:ss")
private Date endDateTime;
yyyy-MM-dd HH:mm:ss 改为 yyyy-MM-dd’T’HH:mm:ss
问题解决
四、 Spring Cloud Consul应用下线后,健康检查自动删除无效服务
解决方案: 在配置文件中如上配置后可以使得服务下线后自动删除无效服务,而不必像很多的博客中写的那样专门写一个删除失效服务。
其它的配置属性解析:
spring.cloud.consul.host:配置consul地址
spring.cloud.consul.port:配置consul端口
spring.cloud.consul.discovery.enabled:启用服务发现
spring.cloud.consul.discovery.register:启用服务注册
spring.cloud.consul.discovery.deregister:服务停止时取消注册
spring.cloud.consul.discovery.prefer-ip-address:表示注册时使用IP而不是hostname
spring.cloud.consul.discovery.health-check-interval:健康检查频率
spring.cloud.consul.discovery.health-check-path:健康检查路径
spring.cloud.consul.discovery.health-check-critical-timeout:健康检查失败多长时间后,取消注册
spring.cloud.consul.discovery.instance-id:服务注册标识
五、出现这种问题是因为定义实体类的时候指定@id字段不是数据库中的主键,而且数据库中该字段的数据违背唯一性。
解决方案:
-
使用@id的字段必须是主键。 -
Oracle 13 版中可以支持某个字段为主键,同时还可以指定多列组合成约束条件。相当于两个主键。两个主键同时唯一才可以插入新数据。 ———————————————— 版权声明:本文为CSDN博主「AZFU0BN」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/chence19871/article/details/99985785
六、 @EnableFeignClients 工作原理
解决方案: 注解@EnableFeignClients:扫描和注册feign客户端bean定义 注解@EnableFeignClients告诉框架扫描所有使用注解@FeignClient定义的feign客户端。它又通过注解@Import导入了类FeignClientsRegistrar( feign客户端注册器)
七、微服务之间的互相调用
解决方案:
@FeignClient(value = "dyj-goods" ,url = "localhost:8082")
public interface GoodsClient extends GoodsApi{
}
八、@NotNull、@NotBlank及@NotEmpty和@Size及@Length区别
解决方案: 1 @NotEmpty :不能为null,且Size>0 2 @NotNull:不能为null,但可以为empty,没有Size的约束 3 @NotBlank:只用于String,不能为null且trim()之后size>0
九、stream().filter()的用法
解决方案: stream.filter一般适用于list集合,主要作用就是模拟sql查询,从集合中查询想要的数据。filter里面的参数user是指集合里面的每一项
public class StreamTest{
public static void main(String[] args){
List<User> list = new ArrayList<>();
User user1 = new User();
user1.setUsername("huxiansen");
user1.setPassword("123456");
User user2 = new User();
user2.setUsername("huxianseng");
user2.setPassword("123456");
User user3 = new User();
user3.setUsername("huxiansen");
user3.setPassword("12345");
list.add(user1);
list.add(user2);
list.add(user3);
?
List<User> userList = list.stream().filter(user -> "huxiansen".equals(user.getUsername())).collect(Collectors.toList());
Optional<User> user = list.stream().filter(userTemp -> "123456".equals(userTemp.getPassword())).findFirst();
?
System.out.println(userList);
System.out.println(user);
}
}
小结
学习目标(传送门)
1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库用法(创作中……) 3、手把手教你vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器(编写中……) 5、吐血整理的 面试技巧(更新中……)
面试题总结
?第一章:日常_JAVA_面试题集15(含答案) ?第二章:日常_JAVA_面试题集14(含答案) ?往期文章大全……
??以上就是今天的内容,关注我,不迷路。
?平安壹钱包面试官:请你说一下Mybatis的实现原理
?Java开发-热点-热门问题精华总结-推荐
一键三连 一键三连 一键三连~
本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》作者 公众号:山峯草堂,非技术多篇文章,专注于天道酬勤的 Java 开发问题、中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 转载说明:务必注明来源(注明:作者:王文峯哦)
|