springboot统一返回格式处理

既是对程序处理的结果进行统一的返回格式,方便前端人员方便解析数据和处理数据。
1.创建统一返回值的格式dao类
2.创建拦截返回值的增强类
3.处理中文乱码问题
4.创建controller类进行测试

1.创建统一返回值的格式dao类

public class ResultUtils<T> {
	private int code;
	private String msg;
	private T Data;

	public static <T>ResultUtils<T> sucess(String msg) {
		ResultUtils<T> result = new ResultUtils<T>();
		result.setCode(200);
		result.setMsg(msg);
		return result;
	}
	public static  <T>ResultUtils<T> sucess(String msg, T data) {
		ResultUtils<T> result = new ResultUtils<T>();
		result.setCode(200);
		result.setMsg(msg);
		result.setData(data);
		return result;
	} 
	public static  <T>ResultUtils<T> fail(String msg) {
		ResultUtils<T> result = new ResultUtils<T>();
		result.setCode(400);
		result.setMsg(msg);
		return result;
	}
	public static <T>ResultUtils<T> fail(String msg, T data) {
		ResultUtils<T> result = new ResultUtils<T>();
		result.setCode(400);
		result.setMsg(msg);
		result.setData(data);
		return result;
	}
	//  getter,setter方法类

这里面主要定义数据返回的格式,主要给前端好判断是否返回成功了,返回的哪些是数据,哪些是提醒等。

2.创建拦截返回值的增强类


@RestControllerAdvice
public class ResultAdvice implements ResponseBodyAdvice<Object> {
	@Override
	public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
				
		if(returnType.getGenericParameterType().equals(ResultUtils.class)) {
			return false;//返回值类型已经是正确了 
		}		
		return true;
	}
	@Override
	public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
			Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
			ServerHttpResponse response) {
		
		if(ObjectUtils.isEmpty(body)) {
			return JSON.toJSONString(ResultUtils.sucess("成功"));
		}
		 return 	 JSON.toJSONString(ResultUtils.sucess("成功",body));
	}
}

返回增强类,需要主要两点,1.需要使用@RestControllerAdvice注解对所有的返回值进行增强处理,2.该类需要实现ResponseBodyAdvice接口进行数据返回前端之前进行增强处理。
supports():方法的返回值类型进行判断是否需要进行增强处理,返回false不需要增强,true表示需要增强处理。
beforeBodyWrite():该方法既是对返回值的增强处理,注意需要返回的是json格式的字符串类型,否则的话会出现java.lang.ClassCastException(java强制类型转换异常)报错。

3.处理中文乱码问题

@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {
	/**
	 * 发现如果继承了WebMvcConfigurationSupport,则在yml中配置的相关内容会失效。 需要重新指定静态资源
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
		registry.addResourceHandler("swagger-ui.html", "doc.html")
				.addResourceLocations("classpath:/META-INF/resources/");
		registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
		super.addResourceHandlers(registry);
	}
	/**
	 * 输出中文乱码问题
	 */
	@Override
	protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
		for (HttpMessageConverter<?> converter : converters) {
			if (converter instanceof StringHttpMessageConverter) {
				((StringHttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8); // 将StringHttpMessageConverter改为utf-8
			}
		}
		super.extendMessageConverters(converters);
	}
}

springboot默认返回的格式是iso-8859-1格式的,返回中文就会乱码,所以需要在MVC进行编码这个extendMessageConverters()方法中的处理字符串的转换器,把他设置为UTF-8的格式。
(似乎也可以直接生产一个bean替换HttpMessageConverter这个bean)。

4.创建controller类进行测试

	@RequestMapping("/t")
	public String  tt() {
		return "测试是否返回成功啊";
	}

4.展示测试效果

{"code":200,"data":"测试是否返回成功啊","msg":"成功"}

5.统一异常处理

@ExceptionHandler(Exception.class)
	public ResultUtils  exceptionHandler(Exception e) {	
		e.printStackTrace();	
		return ResultUtils.fail("出错了", e.getMessage()); 
	}

即是在上面的基础上,在定义一个处理异常的方法。需要添加@ExceptionHandler注解,这个异常也是返回给前端的一个标准的格式而已

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值