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); }); } }