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
*
* @Description:
* @Project:
* @CreateDate: Created in 2020/2/13 11:16
* @Author: liuke
*/
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 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);
});
}
}