精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

優(yōu)雅地統(tǒng)一處理接口返回值的最佳實踐

開發(fā) 前端
通過自定義ResponseBodyAdvice,我們可以實現(xiàn)接口統(tǒng)一返回值的處理,從而提高了接口的可讀性、擴展性和錯誤處理能力。

1. 介紹

如果你正在尋找一種方法來規(guī)范化你的RESTful API的返回值,那么這篇文章將是你的理想選擇。通過閱讀這篇文章,你將了解到如何使用Spring ResponseBodyAdvice來改善你的API設計和實現(xiàn)。

為什么要統(tǒng)一接口返回值?

  • 統(tǒng)一規(guī)范:通過 ResponseBodyAdvice 可以對所有接口返回值進行統(tǒng)一的包裝,從而制定統(tǒng)一的規(guī)范,使得接口返回值更加清晰、易于理解。這對于整個應用程序的接口管理非常有幫助,可以避免不同接口返回值格式不一致的問題。
  • 可讀性增強:通過包裝返回值,可以添加必要的字段,如狀態(tài)碼、狀態(tài)消息等,使得接口返回值更加易于閱讀和理解。這對于開發(fā)者和用戶來說都是非常有益的,可以更方便地了解接口的返回結(jié)果。
  • 擴展性:通過 ResponseBodyAdvice 可以很方便地擴展接口返回值的格式,例如添加JSON格式的返回值,而不需要修改原有的接口代碼。這使得應用程序具有更好的擴展性,可以根據(jù)需求靈活地添加新的返回值格式。

2. 開發(fā)流程

定義統(tǒng)一返回值的包裝類

public class R {
  private Integer code ;
  private Object data ;
  private String message ;
  public R(Integer code, Object data, String message) {
    this.code = code ;
    this.data = data ;
    this.message = message ;
  }
  public static R success(Object data) {
    return new R(200, data, "success") ;
  }
  public static R failure(String message) {
    return new R(500, null, message) ;
  }
}

自定義ResponseBodyAdvice

@RestControllerAdvice
public class PackResponseBodyAdvice implements ResponseBodyAdvice<Object> {
  @Resource
  private ObjectMapper objectMapper ;
  @Override
  public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
    // 只有返回值不是R類型的時候才通過該Advice進行處理
    return !returnType.getParameterType().equals(R.class) ;
  }
  @Override
  public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
      Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
      ServerHttpResponse response) {
    // 統(tǒng)一返回值處理
    return R.success(body) ;
  }


}

測試接口

@RestController
@RequestMapping("/advices")
public class AdviceController {
  @GetMapping("/str")
  public String str() {
    return "success" ;
  }
  @GetMapping("/{id}")
  public User body(@PathVariable("id") Long id) {
    return new User(id, "張三 - " + new Random().nextInt(1000)) ;
  }
}

首先,測試接口/advices/{id}

圖片圖片

處理了最終的返回結(jié)果。

繼續(xù)測試/advices/str

圖片圖片

程序出錯了

控制臺輸出

java.lang.ClassCastException: class com.pack.common.dto.R cannot be cast to class java.lang.String (com.pack.common.dto.R is in unnamed module of loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')
  at org.springframework.http.converter.StringHttpMessageConverter.addDefaultHeaders(StringHttpMessageConverter.java:44) ~[spring-web-5.3.27.jar:5.3.27]
  at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:211) ~[spring-web-5.3.27.jar:5.3.27]

出現(xiàn)ClassCastException錯誤,是由于Controller接口返回值是String,那么匹配到的HttpMessageConverter是StringHttpMessageConverter處理,而該轉(zhuǎn)換器的調(diào)用是在ResponseBodyAdvice之后執(zhí)行,這時候的字符串已經(jīng)被轉(zhuǎn)換成了R對象,所以最后在write時就出現(xiàn)了類型轉(zhuǎn)換錯誤。通過如下方式處理

public Object beforeBodyWrite(Object body, 
      MethodParameter returnType, 
      MediaType selectedContentType,
      Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
      ServerHttpResponse response) {
  if (body instanceof String) {
    try {
      return this.objectMapper.writeValueAsString(R.success(body)) ;
    } catch (JsonProcessingException e) {
      e.printStackTrace();
    }
  }
  
  return R.success(body) ;
}

圖片

針對返回值是String類型的正常了。

通過自定義注解排除那些不需要處理的接口

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface NoR {
}

修改PackResponseBodyAdvice#supports方法,添加NoR注解的判斷

public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
  // 方法上或者是類上沒有NoR注解
  return (!returnType.hasMethodAnnotation(NoR.class) 
            || AnnotatedElementUtils.hasAnnotation(returnType.getContainingClass(), NoR.class)) 
         && !returnType.getParameterType().equals(R.class)  ;
}

這樣就可以控制具體哪些方法不進行處理了。

通過自定義ResponseBodyAdvice,我們可以實現(xiàn)接口統(tǒng)一返回值的處理,從而提高了接口的可讀性、擴展性和錯誤處理能力。同時,這也有助于保持代碼的清晰和規(guī)范。通過學習和實踐,我們可以更好地利用SpringMVC相應的功能,開發(fā)出更優(yōu)秀的應用程序。

責任編輯:武曉燕 來源: Spring全家桶實戰(zhàn)案例源碼
相關推薦

2025-02-13 00:34:22

Spring對象系統(tǒng)

2019-08-22 14:02:00

Spring BootRestful APIJava

2024-08-09 08:25:32

Spring流程注解

2020-05-26 13:48:05

后端框架異常

2018-04-27 14:18:01

2009-06-22 10:41:34

Spring.AOP

2024-08-01 11:41:54

C#OneOf返回值

2021-06-17 09:32:39

重復請求并發(fā)請求Java

2022-08-03 08:41:30

客戶端操作并發(fā)請求

2020-11-10 10:21:31

架構(gòu)try...catch代碼

2022-11-09 07:42:51

Python編程函數(shù)

2009-12-07 11:11:41

WCF返回值

2024-03-14 09:19:49

2022-05-30 08:03:06

后端參數(shù)校驗異常處理

2024-10-28 08:32:22

統(tǒng)一接口響應SpringBoot響應框架

2011-04-20 11:04:23

LinuxHTTP 302

2009-08-27 09:57:24

Power7處理器

2023-11-28 14:32:04

2012-06-01 15:39:46

休眠狀態(tài)墓碑狀態(tài)

2020-07-09 10:15:55

空值Bug語言
點贊
收藏

51CTO技術(shù)棧公眾號

国产69精品久久久久99| 欧美极品aⅴ影院| 欧美激情视频一区二区| www.四虎在线| 在线男人天堂| 国产精品国产三级国产普通话99 | 久草精品电影| 欧美高清69hd| 亚洲性人人天天夜夜摸| 亚洲欧美日韩一区二区在线| 五月婷婷丁香色| h片视频在线观看| 久久久99免费| 成人免费视频观看视频| 波多野结衣黄色网址| 午夜视频一区| 伊人久久综合97精品| 人妻精品久久久久中文字幕69| 日本在线啊啊| 亚洲精品写真福利| 欧美在线视频二区| 六月婷婷综合网| 麻豆成人免费电影| 51久久精品夜色国产麻豆| 黄色片网站在线播放| 午夜精品福利影院| 日韩精品久久久久久久软件91| 中文字幕一区二区三区人妻| 欧美一区二区三区精品电影| 91麻豆精品一区二区三区| 亚洲啊v在线| 天天干在线影院| 亚洲va韩国va欧美va精四季| 丝袜美腿小色网| 亚洲成a人片77777在线播放| 日韩写真欧美这视频| 成年人在线观看视频免费| av小说在线播放| 最新国产成人在线观看| 日本成人看片网址| 污污网站在线免费观看| 国产99一区视频免费| 国产日本欧美在线观看| 免费av中文字幕| 亚洲尤物精选| 97精品国产97久久久久久春色| 曰本女人与公拘交酡| 欧美wwwww| 在线看片第一页欧美| 久久综合九色九九| 国产成人手机视频| 日韩和一区二区| 午夜一区在线观看| 成人一区二区三区视频在线观看| 国产日韩中文字幕| 国产精品欧美综合| 日本欧美一区二区| 国产999精品久久久影片官网| 动漫精品一区一码二码三码四码| 国产一区二区三区自拍| 精品视频9999| 免费视频网站www| 伊人久久大香线蕉综合四虎小说| 日韩视频免费看| 色老板免费视频| 我不卡伦不卡影院| 久热精品在线视频| 激情小说中文字幕| 亚洲欧洲日本一区二区三区| 久久久久亚洲精品成人网小说| 豆国产97在线 | 亚洲| 亚洲欧洲日本mm| 欧美一级电影久久| 无码人妻av一区二区三区波多野| 日韩精品一级二级 | 6080国产精品一区二区| 久久精品亚洲天堂| xxxx日韩| 亚洲欧美日韩国产成人| av在线播放中文字幕| 国产精品久久久乱弄| 欧美猛少妇色xxxxx| 91蜜桃视频在线观看| 久久一区中文字幕| 国产在线一区二区三区| 超碰在线人人干| 99视频热这里只有精品免费| 欧洲精品码一区二区三区免费看| yourporn在线观看视频| 中文字幕在线不卡视频| 少妇熟女一区二区| av福利导福航大全在线| 精品久久久视频| 欧美伦理片在线看| 天天综合91| 欧美精品一区二区不卡| 欧美成人午夜精品免费| 日韩av自拍| 久久久99久久精品女同性| 国产波霸爆乳一区二区| 91久久黄色| 国产日韩av在线播放| a片在线免费观看| 国产精品一区三区| 久久精品99久久| 二区三区在线| 色无极亚洲影院| 免费大片黄在线观看视频网站| 青青草原在线免费观看视频| 日韩激情免费视频| 欧美日韩视频免费播放| 91香蕉视频黄| 日韩高清欧美激情| 日韩av不卡一区| 亚洲av毛片成人精品| 在线免费黄色av| 免费观看成人性生生活片| 国产探花视频在线播放| 久久超碰亚洲| 日韩电视剧免费观看网站| 国产成人a级片| 先锋影音国产精品| 91免费在线| 草草影院第一页| 国产二区视频在线| 成人羞羞视频免费| 亚洲欧美在线免费| 欧美日韩国产激情| 99精品视频在线播放观看| 亚洲精品一级二级三级| 深夜国产在线播放| 日本视频网站在线观看| 精品一区二区成人免费视频 | 91精品国产高清久久久久久久久 | 91精品国产91久久综合| 91啦中文在线| 激情五月深爱五月| 国产wwwxx| 在线观看亚洲专区| 亚洲人成免费| 亚洲综合资源| 在线免费观看黄色| 欧美日韩一级大片| 日韩视频第二页| 亚洲欧洲另类精品久久综合| 国产精品免费福利| 青青操在线播放| 亚洲精品专区| 成人一区二区三区四区| 男人天堂手机在线| 欧美亚洲高清一区二区三区不卡| 女同性恋一区二区三区| 国内精品久久久久久久影视蜜臀| 欧亚精品中文字幕| 天堂网在线播放| 亚洲免费观看高清完整版在线 | 亚洲 中文字幕 日韩 无码| 日韩mv欧美mv国产网站| 色综合色综合久久综合频道88| 国产精品午夜福利| 久久综合狠狠综合久久激情 | 影音先锋成人在线电影| 91精品久久久久久久久久另类| 日本天堂在线| 欧美日韩中文在线观看| v天堂中文在线| 在线一区欧美| 九色91视频| 精品国产第一福利网站| 国产婷婷成人久久av免费高清| 日韩欧美中文字幕一区二区| 99视频精品全部免费在线| 国产成人无码精品久久久性色| 日韩三级av| www.成人网.com| 欧美一级电影久久| 久久经典视频| 91久久线看在观草草青青| 国产又黄又粗的视频| 亚洲综合好骚| 欧美色欧美亚洲另类七区| av日韩国产| 亚洲欧美国产va在线影院| 男女啊啊啊视频| 国产亚洲精品精华液| 亚洲性图一区二区| 欧美淫片网站| 国产伦精品一区二区三区免| 亚洲欧洲高清| 最近2019年日本中文免费字幕| 国产免费一区二区三区最新不卡| 中文字幕一区不卡| 天天躁日日躁狠狠躁av麻豆男男| 国产欧美一区二区色老头| 欧美一区免费视频| 成人福利片在线| 九九热r在线视频精品| 一区二区视频网| 一区二区三区四区中文字幕| 午夜一区二区三区免费| 丝袜美腿亚洲色图| 毛片在线视频观看| 神马香蕉久久| 成人免费网站在线| 日本高清在线观看视频| 亚洲色在线视频| 国产伦精品一区二区三区免.费| 一区二区三区成人| 亚洲午夜久久久久久久久红桃| 免费人成精品欧美精品| 欧美日韩中文字幕在线播放| 亚洲+变态+欧美+另类+精品| 国产精品视频自拍| 538视频在线| 亚洲网站在线播放| 丰满少妇一级片| 日韩欧美在线播放| 大地资源高清在线视频观看| 成人18精品视频| 国产91色在线观看| 日韩亚洲国产精品| 在线视频亚洲自拍| 婷婷成人在线| 97伦理在线四区| 欧美亚洲韩国| 久久久久久97| 顶级网黄在线播放| 影音先锋欧美精品| 日本人妖在线| 日韩视频一区二区三区在线播放| 午夜一级黄色片| 精品久久久久久| 91成人福利视频| 国产丝袜美腿一区二区三区| 风韵丰满熟妇啪啪区老熟熟女| 精品一二三四在线| 激情六月丁香婷婷| 亚洲神马久久| 男人天堂a在线| 午夜精品电影| 中文字幕成人一区| 日韩欧美一区二区三区免费看| 久草热久草热线频97精品| 欧美经典一区| 亚洲欧洲成人精品av97| 免费国产黄色网址| 亚洲国产美女| 日韩人妻一区二区三区蜜桃视频| 久久综合88| 亚洲春色在线视频| 久久免费大视频| 三区精品视频观看| 九九在线高清精品视频| 欧美午夜精品久久久久久蜜| 久草在线综合| 久久精品日产第一区二区三区| 北条麻妃一区二区三区在线观看 | 色呦呦在线播放| 欧美成人黄色小视频| 九一国产在线| 亚洲欧美在线一区| 成人免费黄色网页| 亚洲人成电影网站色| 国产日本在线视频| 亚洲欧美中文另类| 69久久久久| 国产亚洲欧洲黄色| 137大胆人体在线观看| 亚洲午夜精品久久久久久性色| 免费a级毛片在线观看| 国产一区二区三区在线观看网站| 欧洲伦理片一区 二区 三区| 亚洲午夜未删减在线观看| 亚洲色图欧美视频| 亚洲一级黄色av| av每日在线更新| 色七七影院综合| 欧美成人视屏| 欧美成人性生活| 91www在线| 国产成人精品电影| 国产成人毛片| 91成人伦理在线电影| 国内自拍欧美| 国模一区二区三区私拍视频| 精品一区欧美| 在线国产精品网| 日韩一区电影| 黄色一级视频播放| 99精品久久久| 看欧美ab黄色大片视频免费| 国产成人在线视频网站| 国产一级二级视频| 欧美激情综合在线| 久久久久久久久久一区二区三区| 精品久久久久久久久中文字幕 | 亚洲狠狠丁香婷婷综合久久久| 久久精品视频久久| 一本久久综合亚洲鲁鲁五月天| 中文字幕一区二区三区四区免费看 | 99在线高清视频在线播放| 国产精品chinese在线观看| 日韩视频中午一区| 91aaaa| 日韩不卡av在线| 手机在线精品视频| 亚洲精品中文字幕99999| 国产欧美一区二区在线| 中文国产成人精品| 一本大道东京热无码aⅴ| 久久国产精品二区| 日本在线看片免费人成视1000| 91一区二区三区四区| 伊人婷婷欧美激情| 亚洲视频在线免费观看| 精品久久久久久久久久久院品网| 精品人在线二区三区| 99精品在线直播| 伊人网综合视频| caopo在线| 免播放器亚洲| 久久精品亚洲热| 成人做爰69片免费| 国产视频中文字幕在线观看| 亚洲第一网站| 在线观看亚洲精品| 久久riav| 成年人av电影| 九色成人搞黄网站| 国产色综合久久| 色综合久久久久久久久五月| 国产探花在线精品一区二区| 国产一区二区三区乱码| 国产一区二区三区综合| 中文字幕精品视频在线| 一区二区三区在线观看视频| 中文字幕在线观看第二页| 亚洲美女自拍视频| 伦理在线一区| 91久久国产婷婷一区二区| 欧美日韩精品在线一区| 日韩av一二三四区| av网站免费线看精品| 日本a级片视频| 欧美精品日日鲁夜夜添| 国产精品毛片一区二区三区四区| 91精品国产91久久久久久久久 | 国产精品视频一二三区| 亚洲精品国产精品乱码| 在线不卡免费av| av网站大全在线观看| 91av国产在线| 久久久久久毛片免费看| 黄色大片中文字幕| 成人免费高清视频在线观看| 欧美丰满艳妇bbwbbw| 91精品国产综合久久久蜜臀粉嫩| 国产精品麻豆一区二区三区| 国内精品小视频| 精品国产午夜肉伦伦影院| 人人妻人人做人人爽| 成人av网站大全| 麻豆视频在线观看| 日韩免费在线观看| heyzo中文字幕在线| 国产成人精品福利一区二区三区 | 亚洲激情欧美| 无码人妻精品一区二区三区温州 | 91破解版在线观看| 韩日午夜在线资源一区二区| 亚洲精品四区| 性少妇bbw张开| 性做久久久久久久久| 香蕉视频网站在线| 国产成人avxxxxx在线看| 国产一区日韩| 婷婷中文字幕在线观看| 久久久不卡网国产精品一区| 亚洲精品一区二三区| 中文字幕亚洲综合| 中文成人在线| 青青草视频在线视频| 97精品国产97久久久久久久久久久久| 色婷婷av国产精品| 亚洲区在线播放| 亚洲成人a级片| 国产精品一二三在线观看| 99久久精品国产网站| 尤物视频免费观看| 久久电影一区二区| 国产欧美日韩电影| 亚洲国产精品成人天堂| 久久久精品国产免大香伊| 国产日韩在线看| 亚洲精品国产九九九| 九九爱精品视频| 中文字幕一区二区不卡| 亚洲国产中文字幕在线| 欧美在线视频一区二区| 99视频精品全国免费|