栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

zuulGateway 通过filter统一修改返回值的操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zuulGateway 通过filter统一修改返回值的操作

使用spring cloud有时候我们给客户端返回内容的时候,往往需要添加一些额外的东西。比如加密,多添加一个返回值等等。

当然可以在方法里面处理,但如果方法很多,需要统一处理的,就很不方便了,这时候可以通过zuulGateway的filter来统一处理。

直接看代码,很简单:

import java.io.InputStream;
import java.nio.charset.Charset;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.poly.zuul.common.Constants;
import com.poly.zuul.enums.ServiceId;
import com.poly.zuul.utils.AESJSEncryptUtils;
import com.poly.zuul.utils.RsaEncryptUtil;

public class ResponseFilter extends ZuulFilter
{
 @Override
 public Object run()
 {
  RequestContext context = RequestContext.getCurrentContext();
  try
  {
   // 获取返回值内容,加以处理
   InputStream stream = context.getResponseDataStream();
   String body = StreamUtils.copyToString(stream, Charset.forName("UTF-8"));
   String returnStr = "";
 
 //你的处理逻辑,加密,添加新的返回值等等.....
 
   // 内容重新写入
   context.setResponseBody(returnStr);
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
  return null;
 }
 @Override
 public boolean shouldFilter()
 {
  RequestContext ctx = RequestContext.getCurrentContext();
  String requestURI = String.valueOf(ctx.get("requestURI"));
  if (requestURI.contains(Constants.alipay))
  {
 //不需要处理的URL请求,返回false
   return false;
  }
  return true;
 }
 @Override
 public int filterOrder()
 {
  return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 3;
 }
 @Override
 public String filterType()
 {
  return FilterConstants.POST_TYPE;// 在请求被处理之后,会进入该过滤器
 }
}

然后在@Configuration里面注册一下这个filter就可以了

 @Bean
 public ResponseFilter responseFilter()
 {
  return new ResponseFilter();
 }

补充知识:springCloud 服务提供者应返回的统一的数据格式

我就废话不多说了,大家还是直接看代码吧~

package com.zledu.commonentity.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
import java.util.List;

@Data
public class baseResult implements Serializable {
 private static final String OK = "OK";
 private static final String NotOK = "notOk" ;
 private static final String SUCCESS = "操作成功";
 private String result;
 private Object data;
 private String success;
 private Cursor cursor;
 private List errors;
 // TODO 返回无参ok
 public static baseResult ok(){
  return createRestult(OK, null, SUCCESS,null,null ) ;
 }
 // TODO 返回带success 的 ok
 public static baseResult ok(String success){
  return createRestult(OK, null, success, null, null);
 }
 // TODO 返回带 data 的ok
 public static baseResult ok(Object data){
  return createRestult(OK, data, SUCCESS, null, null);
 }
 // 返回带分页的数据
 public static baseResult ok(Object data, Cursor cursor) {
  return createRestult(OK, data, SUCCESS, cursor, null);
 }
 // TODO 返回错误数据
 public static baseResult notOk(List errors){
  return createRestult(NotOK, null, null, null, errors);
 }
 // TODO 构建错误与正确方法
 public static baseResult createRestult(String result, Object data,String success, Cursor cursor, List errors){
  baseResult baseResult = new baseResult();
  baseResult.setResult(result);
  baseResult.setData(data);
  baseResult.setSuccess(success);
  baseResult.setCursor(cursor);
  baseResult.setErrors(errors);
  return baseResult;
 }
 @Data
 @AllArgsConstructor
 public static class Cursor {
  private int total;
  private int offset;
  private int limit;
 }
 @Data
 @AllArgsConstructor
 public static class Error{
  private String field;
  private String message;
 }
}

以上这篇zuulGateway 通过filter统一修改返回值的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/131202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号