欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > SpringMVC常用功能实现

SpringMVC常用功能实现

2025/2/1 21:07:36 来源:https://blog.csdn.net/ty2587/article/details/139974603  浏览:    关键词:SpringMVC常用功能实现

1. 导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 端口配置

server:port: 8080

3. 统一功能处理

3.1 拦截器

3.1.1 生成

package com.example.config;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;@Component
public class RequestInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 鉴权HttpSession session = request.getSession(false);if (session == null || session.getAttribute("username") == null) {response.setStatus(401);return false;}return true;}
}

3.1.2 注册

package com.example.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate RequestInterceptor requestInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(requestInterceptor).addPathPatterns("/**").excludePathPatterns("/login");}
}

3.2 统一数据返回

package com.example.config;import com.example.model.Result;
import com.fasterxml.jackson.databind.json.JsonMapper;
import lombok.SneakyThrows;
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.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import java.lang.reflect.Method;@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice<Object> {private final static JsonMapper mapper = new JsonMapper();@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {// 获取执行方法Method method = returnType.getMethod();System.out.println(method.getName());return true;}@SneakyThrows@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if (body instanceof Result) {// 包含统一响应格式或异常处理直接返回return body;} else if (body instanceof String) {// String由于映射器原因,直接返回对象会报错,需要转换一下return mapper.writeValueAsString(Result.success(body));}return Result.success(body);}
}

3.3 统一异常处理

异常处理捕获后会从子到父依次匹配。

package com.example.config;import com.example.model.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ResponseBody
@ControllerAdvice
public class ExceptionAdvice {@ExceptionHandlerpublic Object handler(Exception e) {return Result.fail("内部错误");}@ExceptionHandlerpublic Object handler(NullPointerException e) {return Result.fail("NullPointerException");}
}

3.4 执行顺序

拦截器

目标方法  统一异常处理  统一数据返回

拦截器

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com