1、spring boot与cloud构建微服务,返回数据从json变成了xml

  问题:本身spingboot项目是用@RestController注解,返回结果也是json格式,但是结合springcloud的eureka构建微服务之后,无论是消费者还是提供者,均返回的xml格式,必须在提供者与消费者的方法上添加produces=“application/json”,但是这样本身@RestController注解里集成的@ResponseBody不就没用了吗?

  解决:把这个jackson-dataformat-xml依赖去掉。它是提供了jackson将实体类转化为xml相关的作用。而本身jackson是可以将实体类转化为json的,所以这样Jackson是可以将实体类转化为两种类型的数据,而具体要转化为哪一种数据,是要看http请求里面的accept头信息的,我的浏览器chrome的accept是  Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 ,然后服务器会根据accept来决定是返回xml还是json,由于浏览器accept只有最后的*/*是匹配 application/json的,而application/xml在*/*前面,优先级比json高,所以用浏览器直接调用是会优先返回xml格式的。

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.dataformat</groupId>
                    <artifactId>jackson-dataformat-xml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2、GET请求多参数的URL

假设我们请求的URL包含多个参数,例如http://microservice-provider-user/get?id=1&username=张三 ,要怎么办呢?

我们知道Spring Cloud为Feign添加了Spring MVC的注解支持,那么我们不妨按照Spring MVC的写法尝试一下:

@FeignClient("microservice-provider-user")
public interface UserFeignClient { @RequestMapping(value = "/get", method = RequestMethod.GET) public User get0(User user); } 

然而我们测试时会发现该写法不正确,我们将会收到类似以下的异常:

feign.FeignException: status 405 reading UserFeignClient#get0(User); content:
{"timestamp":1482676142940,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method 'POST' not supported","path":"/get"} 

由异常可知,尽管指定了GET方法,Feign依然会发送POST请求。

正确写法如下:

(1) 方法一

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient { @RequestMapping(value = "/get", method = RequestMethod.GET) public User get1(@RequestParam("id") Long id, @RequestParam("username") String username); } 

这是最为直观的方式,URL有几个参数,Feign接口中的方法就有几个参数。使用@RequestParam注解指定请求的参数是什么。

(2) 方法二

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient { @RequestMapping(value = "/get", method = RequestMethod.GET) public User get2(@RequestParam Map<String, Object> map); } 

多参数的URL也可以使用Map去构建。当目标URL参数非常多的时候,可使用这种方式简化Feign接口的编写。

3、POST请求包含多个参数

下面我们来讨论如何使用Feign构造包含多个参数的POST请求。举个例子,假设我们的用户微服务的Controller是这样编写的:

@RestController
public class UserController { @PostMapping("/post") public User post(@RequestBody User user) { ... } } 

我们的Feign接口要如何编写呢?答案非常简单,示例:

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient { @RequestMapping(value = "/post", method = RequestMethod.POST) public User post(@RequestBody User user); }

4、自己不能调用自己的FeignClient?

例如:auth-service有控制器,针对控制器单独写了FeignClient,作为SDK。另一system-service调用SDK,通过FeignClient访问auth-service的控制器,因为有拦截器,拦截器中调用了自己的SDK中的FeignClient。会出现报错:FeignClient未找到实现。可能有待验证。

但是这么实现确实有问题,自己调用自己的Feignclient确实没有必要,FeignClient中其实就是调用自己的实现,为什么不直接调自己的实现呢,还用从client中转一下?所以自己调用自己的FeignClient情况,还是直接调用自己的方法吧。

转载于:https://www.cnblogs.com/leanfish/p/9026790.html

Springboot学习问题记录相关推荐

  1. 目录:SpringBoot学习目录

    SpringBoot配套源码地址:gitee.com/hengboy/spr- SpringCloud配套源码地址:gitee.com/hengboy/spr- SpringBoot相关系列文章请访问 ...

  2. SpringBoot学习笔记(8):事物处理

    SpringBoot学习笔记(8):事物处理 快速入门 在传统的JDBC事务代码开发过程中,业务代码只有一部分,大部分都是与JDBC有关的功能代码,比如数据库的获取与关闭以及事务的提交与回滚.大量的t ...

  3. SpringBoot(学习笔记)

    SpringBoot学习笔记 从今天开始就进入微服务阶段 一些小问题 1.HelloWorld 1.1回顾什么是Spring 1.2什么是SpringBoot 1.3微服务架构 2.第一个Spring ...

  4. SpringBoot学习之单点登录

    SpringBoot学习之单点登录 单点登录 登录 注销 部署 实现 主要功能 重要步骤 sso-client拦截未登录请求 sso-server拦截未登录请求 sso-server验证用户登录信息 ...

  5. SpringBoot 学习笔记

    SpringBoot 学习笔记 文章目录 SpringBoot 学习笔记 1. SpringBoot简介 1.1 什么是Spring 1.2 Spring 是如何简化Java开发的 1.3 什么是 S ...

  6. 狂神说——SpringBoot学习

    spring官网 SpringBoot官网 spring-security版本下载 狂神官网学习 也可以搜索B站 (狂神说) 学习网站:https://www.bilibili.com/video/B ...

  7. springboot 实现机器学习_机器学习入门之SpringBoot学习历程

    本文主要向大家介绍了机器学习入门之SpringBoot学习历程,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 经过同事介绍,听说了SpringBoot框架,并且亲身感受过这个框架的优 ...

  8. 超详细的springBoot学习教程,springboot学习看这篇就够了

    springBoot学习 https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/index.html (官方文档) ...

  9. springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题

    springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...

最新文章

  1. JAVA设计模式(09):结构型-代理模式(Proxy)
  2. im即时通讯源码_IM消息ID技术专题(六):深度解密滴滴的高性能ID生成器(Tinyid)
  3. C++ Primer Plus学习:第十章
  4. Python二分查找的三种思路
  5. Cocos2d-x学习笔记(19)(TestCpp源代码分析-3)
  6. Java核心类库篇6——IO
  7. Recovering deleted Records
  8. NetBeans 时事通讯(刊号 # 51 - Apr 07, 2009)
  9. win7(64位)php5.5-Apache2.4-环境安装
  10. 新冠疫情分析(疫情数据爬取+数据分析+网页排版展示)
  11. 魔兽争霸V星际争霸V红警
  12. JVM系列(十三)——垃圾回收器
  13. php_uname()函数
  14. PTA 使我精神焕发
  15. Ubuntu自动更换壁纸
  16. python基础代码大全博客园,python基础代码大全解释
  17. 如何恢复录音删除的录音文件_录音文件降噪?快使用GoldWave!
  18. 软考中级 真题 2014年下半年 系统集成项目管理工程师 应用技术 下午试卷
  19. speedoffice使用方法——Word如何插入图片
  20. Uncaught SyntaxError: Invalid shorthand property initialize

热门文章

  1. trap--shell脚本调试的不二人选
  2. 一文读懂除法溢出-使用汇编重定向0号中端(除法错误中断,比如,执行div指令产生的除法溢出)
  3. 8086处理器的无条件转移指令——《x86汇编语言:从实模式到保护模式》读书笔记13
  4. Spring学习总结三
  5. idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总
  6. sudo apt-get update 出错 Updating from such a repository can‘t be done securely, and is therefore
  7. VNC over reverse SSH
  8. 【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
  9. Android“应用克隆”漏洞分析
  10. Android O限制系统全屏进一步遏制手机勒索