package com.kidgrow.common.utils;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.kidgrow.common.model.Result;
|
import com.kidgrow.common.model.ResultBody;
|
import org.springframework.core.io.buffer.DataBuffer;
|
import org.springframework.core.io.buffer.DataBufferFactory;
|
import org.springframework.core.io.buffer.DataBufferUtils;
|
import org.springframework.http.HttpStatus;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.server.reactive.ServerHttpResponse;
|
import org.springframework.web.server.ServerWebExchange;
|
import reactor.core.publisher.Mono;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.Writer;
|
import java.nio.charset.Charset;
|
|
/**
|
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
|
*
|
* @Description: <br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/13 11:16 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
public class ResponseUtil {
|
private ResponseUtil() {
|
throw new IllegalStateException("Utility class");
|
}
|
/**
|
* 通过流写到前端
|
*
|
* @param objectMapper 对象序列化
|
* @param response
|
* @param msg 返回信息
|
* @param httpStatus 返回状态码
|
* @throws IOException
|
*/
|
public static void responseWriter(ObjectMapper objectMapper, HttpServletResponse response, String msg, int httpStatus) throws IOException {
|
ResultBody result = ResultBody.ok(httpStatus, msg);
|
responseWrite(objectMapper, response, result);
|
}
|
|
/**
|
* 通过流写到前端
|
* @param objectMapper 对象序列化
|
* @param response
|
* @param obj
|
*/
|
public static void responseSucceed(ObjectMapper objectMapper, HttpServletResponse response, Object obj) throws IOException {
|
ResultBody result = ResultBody.ok().data(obj);
|
responseWrite(objectMapper, response, result);
|
}
|
|
/**
|
* 通过流写到前端
|
* @param objectMapper
|
* @param response
|
* @param msg
|
* @throws IOException
|
*/
|
public static void responseFailed(ObjectMapper objectMapper, HttpServletResponse response, String msg) throws IOException {
|
ResultBody result = ResultBody.failed(msg);
|
responseWrite(objectMapper, response, result);
|
}
|
|
private static void responseWrite(ObjectMapper objectMapper, HttpServletResponse response, ResultBody result) throws IOException {
|
response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
|
try (
|
Writer writer = response.getWriter()
|
) {
|
writer.write(objectMapper.writeValueAsString(result));
|
writer.flush();
|
}
|
}
|
|
/**
|
* webflux的response返回json对象
|
*/
|
public static Mono<Void> responseWriter(ServerWebExchange exchange, int httpStatus, String msg) {
|
Result result = Result.succeedWith(null, httpStatus, msg);
|
ServerHttpResponse response = exchange.getResponse();
|
response.getHeaders().setAccessControlAllowCredentials(true);
|
response.getHeaders().setAccessControlAllowOrigin("*");
|
response.setStatusCode(HttpStatus.valueOf(result.getResp_code()));
|
response.getHeaders().setContentType(MediaType.APPLICATION_JSON_UTF8);
|
DataBufferFactory dataBufferFactory = response.bufferFactory();
|
DataBuffer buffer = dataBufferFactory.wrap(JSONObject.toJSONString(result).getBytes(Charset.defaultCharset()));
|
return response.writeWith(Mono.just(buffer)).doOnError((error) -> {
|
DataBufferUtils.release(buffer);
|
});
|
}
|
}
|