《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class User {
private String account;
private String password;
}
3、提供接口操作User,controller层
package com.provider.code;
import com.provider.code.pojo.User;
import com.sun.xml.internal.bind.v2.runtime.output.SAXOutput;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
@RequestMapping(“/user”)
public class UserController {
// 路径传参
@RequestMapping(“/{account}”)
public String getByPath(@PathVariable String account){
System.out.println(“account:”+account);
return “provider say : yes”;
}
// 接收两个参数,请求直接携带
@RequestMapping(“/param”)
public String getByParam(@RequestParam(“account”) String account,@RequestParam(“password”) String password){
System.out.println(“account:”+account+“\tpassword:”+password);
return “provider say : yes”;
}
// 接受json数据
@RequestMapping(“/pojo”)
public String getByPojo(@RequestBody User user){
System.out.println(“pojo:”+user);
return “provider say : yes”;
}
// 接收任意类型的方法
@RequestMapping(“/more”)
public String getByMore(@RequestBody Map<String,Object> map){
System.out.println(“more:”+map);
return “provider say : yes”;
}
}
每个方法呈现的结果:
1、
2、
3、在body内传入两个参数
4、
4、在父项目内pom依赖中的dependencies内导入:远程通信
org.springframework.cloud
spring-cloud-starter-openfeign
5、消费者调用生产者的
①、在消费者中定义出生产者的接口
将生产者内建的User实体类复制到消费者内,
建service接口:这个service和生产者的接口保持一致
package com.consumer.code.service;
import com.consumer.code.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
//远程通信,nacos-provider为生产者的名称
@FeignClient(“nacos-provider”)
@SuppressWarnings(“all”)
public interface FeignUserService {
// 路径传参
// 127.0.0.1/{account}
@RequestMapping(“/user/{account}”)
public String getByPath(@PathVariable(value = “account”) String account);
// 接收两个参数,请求直接携带
@RequestMapping(“/user/param”)
public String getByParam(@RequestParam(“account”) String account,@RequestParam(“password”) String password);
// 接受json数据
@RequestMapping(“/user/pojo”)
public String getByPojo(@RequestBody User user);
// 接收任意类型的方法
@RequestMapping(“/user/more”)
public String getByMore(@RequestBody Map<String,Object> map);
}
②、在启动类加入注解:开启远程通信
@EnableFeignClients
二、Feign远程调用
===========
1、远程调用三种传参方式:
①.@PathVariable 路径传参
②.@RequestParam 请求参数传参
③.@RequestBody json传参
2、在消费者内建UserController,调用User接口
package com.consumer.code;
import com.consumer.code.pojo.User;
import com.consumer.code.service.FeignUserService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping(“/user”)
public class UserController {
private FeignUserService service;
public UserController(FeignUserService service) {
this.service = service;
}
@RequestMapping(“/test01”)
public String test01(String account){
service.getByPath(account);
return “yes”;
}
@RequestMapping(“/{account}”)
public String test02(@PathVariable String account){
service.getByPath(account);
return “yes”;
}
@RequestMapping(“/test03”)
public String test03(String account,String password){
service.getByParam(account,password);
return “yes”;
}
@RequestMapping(“/test04”)
public String test04(String account,String password){
service.getByPojo(new User().setAccount(account).setPassword(password));
return “yes”;
}
@RequestMapping(“/test05”)
public String test05(String account,String password){
Map<String,Object> map=new HashMap<>();
map.put(“account”,account);
map.put(“password”,password);
service.getByMore(map);
return “yes”;
}
}
呈现结果:
三、DTO层的构建
==========
解决:生产者的实体类每次都要复制到消费者内,代码冗余
1、DTO封装:
VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。
DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。
DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。
PO(Persistent Object):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。
消费者 远程调用 生产者 : 需要网络传输,使用DTO同一封装对象
原理与SpringBoot启动类相同
①、将DTO对象封装到公共DTO模块
②、为需要的项目引入公共DTO模块
2、、做一个类似启动器的类
①、新建一个模块
②、在此项目导入依赖,无需继承父类,若继承则会依赖冲突,将test类删掉
org.projectlombok
lombok
③、将实体类放入此项目
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
总结:心得体会
既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。
学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。
面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。
最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。
大厂Java架构核心笔记(适合中高级程序员阅读):
[外链图片转存中…(img-J9aAPGeL-1714760964421)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!