电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

如何使用spring ResponseEntity處理http響應

瀏覽:6日期:2023-06-28 09:29:49
簡介

使用spring時,達到同一目的通常有很多方法,對處理http響應也是一樣。本文我們學習如何通過ResponseEntity設置http相應內容、狀態以及頭信息。

ResponseEntity

ResponseEntity標識整個http相應:狀態碼、頭部信息以及相應體內容。因此我們可以使用其對http響應實現完整配置。

如果需要使用ResponseEntity,必須在請求點返回,通常在spring rest中實現。ResponseEntity是通用類型,因此可以使用任意類型作為響應體:

@GetMapping('/hello')ResponseEntity<String> hello() { return new ResponseEntity<>('Hello World!', HttpStatus.OK);}

可以通過編程方式指明響應狀態,所以根據不同場景返回不同狀態:

@GetMapping('/age')ResponseEntity<String> age( @RequestParam('yearOfBirth') int yearOfBirth) { if (isInFuture(yearOfBirth)) {return new ResponseEntity<>( 'Year of birth cannot be in the future', HttpStatus.BAD_REQUEST); } return new ResponseEntity<>( 'Your age is ' + calculateAge(yearOfBirth), HttpStatus.OK);}

另外,還可以設置http響應頭:

@GetMapping('/customHeader')ResponseEntity<String> customHeader() { HttpHeaders headers = new HttpHeaders(); headers.add('Custom-Header', 'foo'); return new ResponseEntity<>( 'Custom header set', headers, HttpStatus.OK);}

而且, ResponseEntity提供了兩個內嵌的構建器接口: HeadersBuilder 和其子接口 BodyBuilder。因此我們能通過ResponseEntity的靜態方法直接訪問。

最簡單的情況是相應包括一個主體及http 200響應碼:

@GetMapping('/hello')ResponseEntity<String> hello() { return ResponseEntity.ok('Hello World!');}

大多數常用的http 響應碼,可以通過下面static方法:

BodyBuilder accepted();BodyBuilder badRequest();BodyBuilder created(java.net.URI location);HeadersBuilder<?> noContent();HeadersBuilder<?> notFound();BodyBuilder ok();

另外,可以能使用BodyBuilder status(HttpStatus status)和BodyBuilder status(int status) 方法設置http狀態。使用ResponseEntity BodyBuilder.body(T body)設置http響應體:

@GetMapping('/age')ResponseEntity<String> age(@RequestParam('yearOfBirth') int yearOfBirth) { if (isInFuture(yearOfBirth)) {return ResponseEntity.badRequest() .body('Year of birth cannot be in the future'); } return ResponseEntity.status(HttpStatus.OK).body('Your age is ' + calculateAge(yearOfBirth));}

也可以自定義頭信息:

@GetMapping('/customHeader')ResponseEntity<String> customHeader() { return ResponseEntity.ok().header('Custom-Header', 'foo').body('Custom header set');}

因為BodyBuilder.body()返回ResponseEntity 而不是 BodyBuilder,需要最后調用。注意使用HeaderBuilder 不能設置任何響應體屬性。

盡管ResponseEntity非常強大,但不應該過度使用。在一些簡單情況下,還有其他方法能滿足我們的需求,使代碼更整潔。

替代方法@ResponseBody

典型spring mvc應用,請求點通常返回html頁面。有時我們僅需要實際數據,如使用ajax請求。這時我們能通過@ResponseBody注解標記請求處理方法,審批人能夠處理方法結果值作為http響應體。

@ResponseStatus

當請求點成功返回,spring提供http 200(ok)相應。如果請求點拋出異常,spring查找異常處理器,由其返回相應的http狀態碼。對這些方法增加@ResponseStatus注解,spring會返回自定義http狀態碼。

直接操作相應

Spring 也允許我們直接 javax.servlet.http.HttpServletResponse 對象;只需要申明其作為方法參數:

@GetMapping('/manual')void manual(HttpServletResponse response) throws IOException { response.setHeader('Custom-Header', 'foo'); response.setStatus(200); response.getWriter().println('Hello World!');}

但需要說明,既然spring已經提供底層實現的抽象和附件功能,我們不建議直接操作response。

總結:本文我們介紹了spring提供多種方式處理http響應,以及各自的優缺點,希望對你有幫助。

ResponseEntity的基本簡介1、ResponseEntity繼承了HttpEntity

可以添加HttpStatus狀態碼的HttpEntity的擴展類。被用于RestTemplate和Controller層方法

2、ResponseEntity可以定義返回的HttpStatus(狀態碼)

和HttpHeaders(消息頭:請求頭和響應頭)HttpStatus的狀態碼有以下幾種

如何使用spring ResponseEntity處理http響應

3、ResponseEntity的優先級高于@ResponseBody

在不是ResponseEntity的情況下才去檢查有沒有@ResponseBody注解。如果響應類型是ResponseEntity可以不寫@ResponseBody注解,寫了也沒有關系。

簡單的說@ResponseBody可以直接返回Json結果,@ResponseEntity不僅可以返回json結果,還可以定義返回的HttpHeaders和HttpStatus

public ResponseEntity<List<Category>> queryCategoriesByPid(@RequestParam(value = 'pid',defaultValue = '0') Long pid){if(pid == null || pid.longValue()<0){ // 響應400,相當于ResponseEntity.status(HttpStatus.BAD_REQUEST).build(); return ResponseEntity.badRequest().build();}//ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); // ResponseEntity.notFound().build();// ResponseEntity.ok(null);List<Category> categoryList = this.categoryService.queryCategoriesByPid(pid);if(CollectionUtils.isEmpty(categoryList)){ // 響應404 return ResponseEntity.notFound().build();}return ResponseEntity.ok(categoryList); }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 招商帮-一站式网络营销服务|互联网整合营销|网络推广代运营|信息流推广|招商帮企业招商好帮手|搜索营销推广|短视视频营销推广 | 凝胶成像系统(wb成像系统)百科-上海嘉鹏| 快速卷帘门_硬质快速卷帘门-西朗门业 | 商秀—企业短视频代运营_抖音企业号托管 | 河南档案架,档案密集架,手动密集架,河南密集架批发/报价 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 加盟店-品牌招商加盟-创业项目商机平台| 深圳品牌设计公司-LOGO设计公司-VI设计公司-未壳创意 | TPM咨询,精益生产管理,5S,6S现场管理培训_华谋咨询公司 | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 分轨 | 上传文件,即刻分离人声和伴奏 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 智能气瓶柜(大型气瓶储存柜)百科| 电子元器件呆滞料_元器件临期库存清仓尾料_尾料优选现货采购处理交易商城 | 电动百叶窗,开窗器,电动遮阳百叶,电动开窗机生产厂家-徐州鑫友工控科技发展有限公司 | 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 小型气象站_车载气象站_便携气象站-山东风途物联网 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 万家财经_财经新闻_在线财经资讯网 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 直流大电流电源,燃料电池检漏设备-上海政飞 | 5nd音乐网|最新流行歌曲|MP3歌曲免费下载|好听的歌|音乐下载 免费听mp3音乐 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 磁粉制动器|张力控制器|气胀轴|伺服纠偏控制器整套厂家--台灵机电官网 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | DNA亲子鉴定_DNA基因检测中心官方预约平台-严选好基因网 |