package com.imyeyu.spring.util; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.ObjectProvider; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.lang.NonNull; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; /** * 统一处理响应中的多语言字段回填 * * @author 夜雨 * @since 2026-07-17 00:00 */ @Component @RestControllerAdvice @RequiredArgsConstructor public class MultilingualResponseBodyAdvice implements ResponseBodyAdvice { private final ObjectProvider multilingualFieldBinder; @Override public boolean supports(@NonNull MethodParameter returnType, @NonNull Class> converterType) { return true; } @Override public Object beforeBodyWrite( Object body, @NonNull MethodParameter returnType, @NonNull MediaType selectedContentType, @NonNull Class> selectedConverterType, @NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response ) { MultilingualFieldBinder binder = multilingualFieldBinder.getIfAvailable(); if (binder != null) { binder.bind(body); } return body; } }