All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.icodegarden.nursery.springboot.web.reactive.handler.ReactiveApiResponseExceptionHandler Maven / Gradle / Ivy

package io.github.icodegarden.nursery.springboot.web.reactive.handler;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.ServerWebInputException;

import io.github.icodegarden.nutrient.lang.spec.response.ApiResponse;
import io.github.icodegarden.nutrient.lang.spec.response.ClientParameterInvalidErrorCodeException;
import io.github.icodegarden.nutrient.lang.spec.response.ClientParameterMissingErrorCodeException;
import io.github.icodegarden.nutrient.lang.spec.response.ErrorCodeException;
import io.github.icodegarden.nutrient.lang.spec.response.OpenApiResponse;

/**
 * 使用 @Bean
 * 
 * @author Fangfang.Xu
 *
 */
public class ReactiveApiResponseExceptionHandler extends AbstractReactiveExceptionHandler {

	private static final Logger log = LoggerFactory.getLogger(ReactiveApiResponseExceptionHandler.class);

	@Override
	public ResponseEntity onServerWebInputException(ServerWebExchange exchange,
			ServerWebInputException cause) throws Exception {

		/**
		 * spring是这样抛出异常的,例如在
		 * RequestParamMethodArgumentResolver.handleMissingValue(String,
		 * MethodParameter, ServerWebExchange)
		 */
//		String type = parameter.getNestedParameterType().getSimpleName();
//		String reason = "Required " + type + " parameter '" + name + "' is not present";
//		throw new ServerWebInputException(reason, parameter);

		ErrorCodeException ece = null;

		String reason = cause.getReason();
		if (reason != null) {
			if (reason.startsWith("Required") || reason.startsWith("Missing")) {
				ece = new ClientParameterMissingErrorCodeException(
						ClientParameterMissingErrorCodeException.SubPair.MISSING_PARAMETER.getSub_code(), reason);
			}
		}

		if (ece == null) {
			ece = new ClientParameterInvalidErrorCodeException(
					ClientParameterInvalidErrorCodeException.SubPair.INVALID_PARAMETER.getSub_code(), reason);
		}

		if (log.isWarnEnabled()) {
			log.warn("{} {}", PARAMETER_INVALID_LOG_MODULE, ece.getMessage(), cause);
		}

		/**
		 * 一律使用OpenApiResponse来构造即可
* biz_code会被gateway补充,那里有BodyCache
*/ return ResponseEntity.ok(OpenApiResponse.fail(null, ece)); } @Override public ResponseEntity onException(ServerWebExchange exchange, Exception cause) { // OpenApiRequestBody body = extractOpenApiRequestBody(request); ErrorCodeException ece = convertErrorCodeException(cause); // if (body != null) { // return ResponseEntity.ok(OpenApiResponse.fail(body.getMethod(), ece)); // } // // return ResponseEntity.ok(InternalApiResponse.fail(ece)); /** * 一律使用OpenApiResponse来构造即可
* biz_code会被gateway补充,那里有BodyCache
*/ return ResponseEntity.ok(OpenApiResponse.fail(null, ece)); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy