在微服务架构中,我们不可避免的要使用到Feign去请求其他接口,这时就会有一个问题,如果Feign请求的接口需要返回一个对象,这个对象是其他微服务中的class,但是本服务中没有,接收时一般就只能将另一个微服务中的class放进本服务中了,对于一般的微服务而言只是需要其中的几个参数而已,这样做并不是最好的方案,而且一般其他的微服务接口都是返回JSON数据格式,更加不利于转义成其他格式,这里,我给大家分享一种不错的解决方法:
如图这个生产者服务的对象类

import java.io.Serializable;
    public class Product implements Serializable {
        private int id;
        private String name;
         * 价格,分为单位
        private int price;
        private int store;
        public int getId() {
            return id;
        public void setId(int id) {
            this.id = id;
        public String getName() {
            return name;
        public void setName(String name) {
            this.name = name;
        public int getPrice() {
            return price;
        public void setPrice(int price) {
            this.price = price;
        public int getStore() {
            return store;
        public void setStore(int store) {
            this.store = store;
        public Product(String name, int price, int store) {
            this.name = name;
            this.price = price;
            this.store = store;
        public Product(int id, String name, int price, int store) {
            this.id = id;
            this.name = name;
            this.price = price;
            this.store = store;
        public Product() {

这是返回类的接口信息,改Controller已经加上了@RestController注解,作用是将接口返回值序列号成JSON字符串

@RestController
@RequestMapping("/api/v1/product")
public class ProductController {
    @Autowired
    private ProductService productService;
     * 获取商品详情
     * @param id
     * @return
    @RequestMapping("/find")
    public Object find(@RequestParam("id") int id){
        Product product = this.productService.findById(id);
        return product;

因为该接口的返回值已经是JSON格式了,所以说我们可以使用String类型接收,这样更稳定,不会像使用Map之类的对象接收时容易出现转义报错的现象。接下来我推荐使用JsonNode对象来去将该JSON字符串转成JsonNode对象,这个对象的使用方法跟HashMap容器很像,而且还有更多的API,具体使用看下图:
这是Service层中的调用转换类型

@Service
public class ProductOrderServiceImpl implements ProductOrderService {
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private ProductClient productClient;
    public ProductOrder save(int userId, int productId)  {
        String reponse=this.productClient.findById(productId);
        //这里调用了一个自己写的方法来进行转换
        JsonNode jsonNode= Utils.str2JsonNode(reponse);
        ProductOrder productOrder = new ProductOrder();
        productOrder.setCreateTime(new Date());
        productOrder.setUserId(userId);
        productOrder.setTradeNo(UUID.randomUUID().toString());
        productOrder.setProductName(jsonNode.get("name").toString());
        productOrder.setPrice(Integer.parseInt(jsonNode.get("price").toString()));
        return productOrder;

转换工具类

* 工具类 public class Utils { private static final ObjectMapper OBJECT_MAPPER=new ObjectMapper(); * 字符串转json * @param str * @return public static JsonNode str2JsonNode(String str){ try { return OBJECT_MAPPER.readTree(str); } catch (IOException e) { return null; 问题描述在微服务架构中,我们不可避免的要使用到Feign去请求其他接口,这时就会有一个问题,如果Feign请求的接口需要返回一个对象,这个对象是其他微服务中的class,但是本服务中没有,接收时一般就只能将另一个微服务中的class放进本服务中了,对于一般的微服务而言只是需要其中的几个参数而已,这样做并不是最好的方案,而且一般其他的微服务接口都是返回JSON数据格式,更加不利于转义成其他格式,这...
因项目的需要,PHP调用第三方 Java/.Net 写好的 Restful Api,其中有些接口,需要 在发送 POST 请求,传入对象。 Http中传输对象,最好的表现形式莫过于JSON字符串了,但是作为参数的接收方,又是需要被告知传过来的是JSON! 其实这不难,只需要发送一个 http Content-Type头信息即可,即 “Content-Type: application/json; charset=utf-8”,参考代码如下: * PHP发送Json对象数据 * @param $url 请求url * @param $jsonStr 发送的js
Feign 是一种声明式、模板化的 HTTP 客户端(仅在 consumer 中使用)1.server端(定义pojo与接口API)注意: 1.get方式不能传递对象必须将参数进行拆分处理,因为feign默认使用的httpURLConnection进行consumer与propertie之间请求的处理 2.get方式必须使用@RequestParam注解 3.post方式传递对象必须使用@R...
如果是基本数据类型的话,使用@RequestParam @RequestMapping(value = "/selectDetails",method= RequestMethod.GET) List<Map<String, Object>> select...
文章目录前言HTTP 请求方式GET请求案例1. 没有参数2. 多个基础类型参数4. 集合数据参数5. 单个对象参数6. 多个对象参数7. 下载文件POST 请求案例1. 传递单个对象参数2. 传递多个对象参数3. 上传文件 在之前,我们分析了Feign 的基本原理及相关源码,实际在使用还是需要额外注意Feign 调用接口的编写,需要安排其规定的格式,不然那很容易出错,下面就总结一下常用的GET/POST请求需要注意的问题。 HTTP 请求方式 GET和POST是HTTP请求的两种基本方法,最直
Feign 可以在服务消费者和服务提供者之间进行GET和Post多参数传递的。springmvc中是支持GET方法绑定pojo的,但是Feign 并未覆盖springmvc中的所有方法,目前解决方式很多,常见的有如下方式: 把pojo拆分成一个个单独的属性做为方法参数 方法参数作为map传递 如果不这么解决当使用对象做为参数会报以下错误: 当然以下错误的原因还有可能是通过Feign 进行服务间调用,GET方法的参数没有加@PathVariable或@RequestParam注解 feign.Feig
最近转java,背靠公司java大神,利用spring cloud框架重构现有业务,新手遇坑是常事,也是喜闻乐见的,趟坑能让自己快速的学习成长。 Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。 具体的介绍就不多说了,直接看github就好,这里写链接内容 这里主要记录一下利用feign发送post请求遇到的问题。
声明:本结论基于Spring Cloud Dalston.RC1、Spring Boot1.5.2.RELEASE。 feign消费服务,以GET方式请求的条件: 如果想让服务消费者采用GET方式调用服务提供者,那么需要: 服务消费者这边feign调用,在所有参数前加上@Request...
params = { 'username': 'abc', 'password': '123' } response = requests.post(url, data=params) 4. 获取响应 发送请求后,服务器将返回一个响应。你可以通过response对象来获取它。例如,你可以使用response.text获取响应文本或使用response.json获取JSON响应数据。 5. 处理异常 在使用requests库发送POST请求,有可能会出现异常情况。比如,请求或者连接被拒绝。在这种情况下,需要捕获异常并进行处理。 以上就是Python发送POST请求的基本步骤。需要注意的是,在实际操作中,我们可能还需要设置headers、cookies等参数,以便更好地控制请求。 SpringBoot升级2.4.0所出现的问题:When allowCredentials is true, allowedOrigins cannot contain the specia 64677 CSDN-Ada助手: 嗨~好久未见你更新博文了,我们现在上线了AI创作助手哦~可为你的创作提供智能化帮助,快来试试吧~https://editor.csdn.net/md/?not_checkout=1&utm_source=blog_comment_recall,在编辑器页面右侧哦~~限免!! 同时我们为您准备了一份回归奖励,快来看看吧https://activity.csdn.net/creatActivity?id=10430&utm_source=blog_comment_recall 在vue中CSS控制一个元素或图片进行上下左右的反复移动 星河顾盼: 屏幕自适应的时候 @keyframes里面写的样式不会变化 Nacos1.2.0,sentinl,seata-server1.2.0,seata-server0.9.0的zip文件下载百度网盘分享下载 差不多先生mck: 点个大大的赞表情包 mockjs与vue-simple-uploader(大文件分片上传)同时使用报错! bobringtheboys: 应该是这个 xhr.upload.addEventListener is not a function