Springboot学习问题记录
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学习问题记录相关推荐
- 目录:SpringBoot学习目录
SpringBoot配套源码地址:gitee.com/hengboy/spr- SpringCloud配套源码地址:gitee.com/hengboy/spr- SpringBoot相关系列文章请访问 ...
- SpringBoot学习笔记(8):事物处理
SpringBoot学习笔记(8):事物处理 快速入门 在传统的JDBC事务代码开发过程中,业务代码只有一部分,大部分都是与JDBC有关的功能代码,比如数据库的获取与关闭以及事务的提交与回滚.大量的t ...
- SpringBoot(学习笔记)
SpringBoot学习笔记 从今天开始就进入微服务阶段 一些小问题 1.HelloWorld 1.1回顾什么是Spring 1.2什么是SpringBoot 1.3微服务架构 2.第一个Spring ...
- SpringBoot学习之单点登录
SpringBoot学习之单点登录 单点登录 登录 注销 部署 实现 主要功能 重要步骤 sso-client拦截未登录请求 sso-server拦截未登录请求 sso-server验证用户登录信息 ...
- SpringBoot 学习笔记
SpringBoot 学习笔记 文章目录 SpringBoot 学习笔记 1. SpringBoot简介 1.1 什么是Spring 1.2 Spring 是如何简化Java开发的 1.3 什么是 S ...
- 狂神说——SpringBoot学习
spring官网 SpringBoot官网 spring-security版本下载 狂神官网学习 也可以搜索B站 (狂神说) 学习网站:https://www.bilibili.com/video/B ...
- springboot 实现机器学习_机器学习入门之SpringBoot学习历程
本文主要向大家介绍了机器学习入门之SpringBoot学习历程,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 经过同事介绍,听说了SpringBoot框架,并且亲身感受过这个框架的优 ...
- 超详细的springBoot学习教程,springboot学习看这篇就够了
springBoot学习 https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/index.html (官方文档) ...
- springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题
springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...
最新文章
- JAVA设计模式(09):结构型-代理模式(Proxy)
- im即时通讯源码_IM消息ID技术专题(六):深度解密滴滴的高性能ID生成器(Tinyid)
- C++ Primer Plus学习:第十章
- Python二分查找的三种思路
- Cocos2d-x学习笔记(19)(TestCpp源代码分析-3)
- Java核心类库篇6——IO
- Recovering deleted Records
- NetBeans 时事通讯(刊号 # 51 - Apr 07, 2009)
- win7(64位)php5.5-Apache2.4-环境安装
- 新冠疫情分析(疫情数据爬取+数据分析+网页排版展示)
- 魔兽争霸V星际争霸V红警
- JVM系列(十三)——垃圾回收器
- php_uname()函数
- PTA 使我精神焕发
- Ubuntu自动更换壁纸
- python基础代码大全博客园,python基础代码大全解释
- 如何恢复录音删除的录音文件_录音文件降噪?快使用GoldWave!
- 软考中级 真题 2014年下半年 系统集成项目管理工程师 应用技术 下午试卷
- speedoffice使用方法——Word如何插入图片
- Uncaught SyntaxError: Invalid shorthand property initialize
热门文章
- trap--shell脚本调试的不二人选
- 一文读懂除法溢出-使用汇编重定向0号中端(除法错误中断,比如,执行div指令产生的除法溢出)
- 8086处理器的无条件转移指令——《x86汇编语言:从实模式到保护模式》读书笔记13
- Spring学习总结三
- idea部署web项目,能访问jsp,访问Servlet却出现404错误的解决方法汇总
- sudo apt-get update 出错 Updating from such a repository can‘t be done securely, and is therefore
- VNC over reverse SSH
- 【译】Understanding Batch Normalization with Examples in Numpy and Tensorflow with Interactive Code
- Android“应用克隆”漏洞分析
- Android O限制系统全屏进一步遏制手机勒索