这种处理,返回前端成了字符串,不能使用,而且时间也变成了number类型
package com.cpiinfo.iot.isolar.config;
import com.alibaba.fastjson.JSON;
import com.cpiinfo.iot.commons.utils.Result;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import javax.servlet.ServletResponse;
@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
String responseBodyStr = JSON.toJSONString(body);
System.out.println("处理前的数据->>>>>> "+ responseBodyStr);
String replaceAllResult = responseBodyStr.replaceAll("""", ""-"");
System.out.println("处理后的数据->>>>>> "+ replaceAllResult);
return JSON.parseObject(replaceAllResult,Result.class);
}
}
第二种 返回前端一样的是一个json对象,需要处理什么类型可以自定义
package com.cpiinfo.iot.isolar.config;
import cn.hutool.core.util.ObjectUtil;
import com.cpiinfo.iot.commons.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.Collection;
@Slf4j
@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice, Serializable {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
String type = selectedContentType.getType();
String subtype = selectedContentType.getSubtype();
if (!"application".equals(type) || !"json".equals(subtype)) {
return body;
}
try {
Object data = ((Result) body).getData();
sensitiveHidden(data);
} catch (Exception e) {
e.printStackTrace();
}
return body;
}
private void sensitiveHidden(Object body) {
if (body == null || StringUtils.isBlank(body.getClass().getName())) {
return;
}
parse(body);
}
private void parse(Object body) {
Field[] declaredFields = body.getClass().getDeclaredFields();
try {
for (Field declaredField : declaredFields) {
Class> type = declaredField.getType();
// 处理集合
if (Collection.class.isAssignableFrom(type)) {
declaredField.setAccessible(true);
Collection collection = (Collection) declaredField.get(body);
for (Object o : collection) {
parse(o);
}
// 处理字符串(把空字符串修改为-)
} else if (String.class.isAssignableFrom(type)) {
declaredField.setAccessible(true);
String str = (String) declaredField.get(body);
if (ObjectUtil.isEmpty(str)) {
declaredField.set(body, "-");
}
// 处理引用类型
} else if (!type.isPrimitive() && !Serializable.class.isAssignableFrom(type)) {
declaredField.setAccessible(true);
parse(declaredField.get(body));
}
}
} catch (IllegalAccessException e) {
log.info("-------------->MyResponseBodyAdvice --> sensitiveHidden --> 返回结果空字符串统一处理报错<-------------------");
e.printStackTrace();
}
}
}