深入Spring:自定义ResponseBody

本文深入探讨Spring MVC,讲解如何自定义ResponseBody和RequestBody。通过自定义注解,实现对特定类的RequestData和ResponseData的处理。自定义的HttpMessageConverter实现了HttpMessageConverter接口,用于特定类的编码和解码。HandlerAdapter和HttpMessageConverter在Spring MVC中的作用也进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

上一篇文章介绍了SpringMvcRequestMappingHandlerMapping,自定义了ControllerRequestMapping。 这里再介绍一下HandlerAdapterHttpMessageConverter,并通过自定义注解来实现RequestBodyResponseBodyHttpMessageConverter最常见的应用就是json的decode和encode。

RequestBody和ResponseBody

上一篇文章介绍了RequestMappingHandlerMappingDispatcherServlet的作用。 RequestMappingHandlerMapping扫描了RequestMapping注释的HttpRequest对应的处理方法,并通过实现HandlerMapping的接口代理对应的方法。 而HandlerAdapter则是封装了HandlerMapping的方法,并围绕HandlerMapping实现一些嵌入操作。 RequestMappingHandlerAdapter是其中一个典型的例子,这个类包含HandlerMethodArgumentResolverHandlerMethodReturnValueHandler的一些实现类来处理RequestMapping的参数和返回值。

	private HandlerMethodArgumentResolverComposite argumentResolvers;
	private HandlerMethodReturnValueHandlerComposite returnValueHandlers;

RequestResponseBodyMethodProcessorHandlerAdapter的内部一个重要的类,这个类同时实现了HandlerMethodArgumentResolverHandlerMethodReturnValueHandler。 其中HandlerMethodArgumentResolver接口有两个方法。

public interface HandlerMethodArgumentResolver {
	boolean supportsParameter(MethodParameter parameter);
	Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
			NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;
}

HandlerMethodReturnValueHandler接口同样也有两个方法。

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

所以从RequestResponseBodyMethodProcessor实现的方法,就可以看出来这个类,会处理被*@RequestBody注解的参数,和@ResponseBody*注解的返回值。

	@Override
	public boolean supportsParameter(MethodParameter parameter) {
		return parameter.hasParameterAnnotation(RequestBody.class);
	}
	@Override
	public boolean supportsReturnType(MethodParameter returnType) {
		return (AnnotationUtils.findAnnotation(returnType.getContainingClass(), ResponseBody.class) != null ||
				returnType.getMethodAnnotat
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值