第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Spring返回自定義信息指定狀態(tài)碼-@ResponseStatus|HttpServletResponse|ResponseEntity

標(biāo)簽:
Spring

目的

在实现查询 ID 返回指定 ID 对象的信息时,如果这个 ID 只到 8,当我查询 9 的时候,应该是不存在的,这个时候返回的信息应该是提示不存在,而且状态码不能是 200 ,因为这也是一个异常,但是不能抛出异常出现 java 的异常界面。
效果图:
图片描述

@ResponseStatus

首先 @ResponseStatus 是可以实现指定状态码,并且有异常会抛出系统自带的异常,当我查询的结果不存在想表示为 404 的时候代码如下:

	@RequestMapping(value = "/getbyid/{id}", method = RequestMethod.GET)
	@ResponseBody
	private Map<String, Object> getbyid( HttpServletRequest request,@PathVariable(value="id")int idnum,HttpServletResponse response){
		Map<String, Object> modelMap = new HashMap<String, Object>();
		Movie movie=movieService.getMovieById(idnum);
		if(movie==null){
			//如果没查询到结果
			throw new MovieException("");
		}else{
			modelMap.put("movie",movie);
		}
		return modelMap;
	}

MovieException.java

package com.caeser.upmovie.exceptions;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.NOT_FOUND, reason="not found 10001")
public class MovieException  extends RuntimeException{
	private static final long serialVersionUID = -9141529090618182905L;
	public MovieException(String msg){
		super(msg);
	}
}

当我们访问 http://localhost:8080/upmovie/movie/getbyid/9 结果如下:
图片描述

虽然可以看到提示信息,但是结果不够友好,因为当前后端分离之后,前端人员不是要帮你调试程序,而是想通过接口获取指定信息,如果这个信息不存在,那么只需要知道不存在,而且告诉对方这是一个异常就行了。怎样可以实现指定状态码,还能返回自定义异常呢?

HttpServletResponse

HttpServletResponse 是 javax.servlet 下的一个接口
使用它就可以指定返回的状态码,还可以返回自定义的信息,使用方法如下:

@RequestMapping(value = "/getbyid/{id}", method = RequestMethod.GET)
	@ResponseBody
	private Map<String, Object> getbyid( HttpServletRequest request,@PathVariable(value="id")int idnum,HttpServletResponse response){
		Map<String, Object> modelMap = new HashMap<String, Object>();
		Movie movie=movieService.getMovieById(idnum);
		if(movie==null){
			//如果没查询到结果
			response.setStatus(404);
			//UrlReturnMsg是我定义的静态类只保存了两个字符串
			//MovieStateEnum只保存了自定义的状态码和提示信息
			modelMap.put(UrlReturnMsg.stateCode, MovieStateEnum.NOTEXIT.getState());
			modelMap.put(UrlReturnMsg.errorMsg, MovieStateEnum.NOTEXIT.getStateInfo());	
		}else{
			modelMap.put("movie",movie);
		}
		//由于使用了 ResposeBody 返回值以 JSON 串的形式展示
		return modelMap;
	}

当我们访问 http://localhost:8080/upmovie/movie/getbyid/9
结果如下:
图片描述
图片描述

还有一种方式,ResponseEntity<Map<String,Object>> 不建议使用

也可以实现自定义返回信息并指定状态码,直接上代码

@RequestMapping(value = "/getbyidentity/{id}", method = RequestMethod.GET)
	private ResponseEntity<Map<String,Object>> getbyidentity( @PathVariable(value="id")int idnum){
		Map<String, Object> modelMap = new HashMap<String, Object>();
		Movie movie=movieService.getMovieById(idnum);
		if(movie==null){
			//如果没查询到结果
			modelMap.put(UrlReturnMsg.stateCode, MovieStateEnum.NOTEXIT.getState());
			modelMap.put(UrlReturnMsg.errorMsg, MovieStateEnum.NOTEXIT.getStateInfo());	
			return new ResponseEntity<Map<String,Object>>(modelMap,HttpStatus.NOT_FOUND);
		}else{
			modelMap.put("movie",movie);
		}
		return new ResponseEntity<Map<String,Object>>(modelMap,HttpStatus.OK);
	}

返回的结果也是一样的,状态码404,返回自定义信息,这种方式也是可以的。我个人比较喜欢使用 @ResponseBody + HttpServletResponse 的方式,原因很简单,功能分开使得代码更清晰。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開(kāi)發(fā)工程師
手記
粉絲
31
獲贊與收藏
155

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消