日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Springboot学习问题记录

發布時間:2025/3/15 javascript 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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学习问题记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。