全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 10 分钟 ✍️ juanwangdev

Spring MVC 自定义返回值处理器HandlerMethodReturnValueHandler

HandlerMethodReturnValueHandler 接口定义了控制器返回值的处理规则,可将返回值转换为响应内容。

接口定义

Java
public interface HandlerMethodReturnValueHandler {
    boolean supportsReturnType(MethodParameter returnType);
    void handleReturnValue(Object returnValue,
                           MethodParameter returnType,
                           ModelAndViewContainer mavContainer,
                           NativeWebRequest webRequest) throws Exception;
}

核心方法

方法作用
supportsReturnType判断是否支持该返回类型
handleReturnValue处理返回值并写入响应

自定义返回值处理器

Java
public class XmlReturnValueHandler implements HandlerMethodReturnValueHandler {

    @Override
    public boolean supportsReturnType(MethodParameter returnType) {
        return returnType.hasMethodAnnotation(XmlResponse.class);
    }

    @Override
    public void handleReturnValue(Object returnValue,
                                   MethodParameter returnType,
                                   ModelAndViewContainer mavContainer,
                                   NativeWebRequest webRequest) throws Exception {
        HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
        response.setContentType("application/xml;charset=UTF-8");

        // 使用 JAXB 或其他库序列化为 XML
        String xml = convertToXml(returnValue);
        response.getWriter().write(xml);

        mavContainer.setRequestHandled(true);
    }

    private String convertToXml(Object obj) {
        // XML 序列化逻辑
        return "<result>" + obj.toString() + "</result>";
    }
}

自定义注解标记

Java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface XmlResponse {
}

控制器使用

Java
@RestController
@RequestMapping("/api")
public class DataController {

    @GetMapping("/data")
    @XmlResponse
    public Data getData() {
        return new Data("test", 100);
    }
}

注册返回值处理器

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {
        handlers.add(new XmlReturnValueHandler());
    }
}

内置处理器

处理器支持返回类型
ModelAndViewMethodReturnValueHandlerModelAndView
ViewMethodReturnValueHandlerView
RequestResponseBodyMethodProcessor@ResponseBody
HttpEntityMethodProcessorHttpEntity

调用 mavContainer.setRequestHandled(true) 表示已处理请求,不再进行视图渲染。

要点总结

  • supportsReturnType 匹配返回类型或方法注解
  • handleReturnValue 负责写入响应内容
  • 必须设置 requestHandled 阻止后续处理
  • 通过 addReturnValueHandlers 注册自定义处理器

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring MVC 自定义HandlerMapping处理器映射器
下一篇 → DispatcherServlet初始化流程
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库