SpringBoot 통합 사용자 정의 HandlerMethodArgument Resolver 매개 변수 초기 값 분석
대부분https://www.cnblogs.com/yangzhilong/p/7605889.html。
전통 적 인 SpringMVC 통합 사용자 정의 HandlerMethodArgument Resolver 방식 은 다음 과 같 습 니 다.http://www.cnblogs.com/yangzhilong/p/6282218.html
SpringBoot 에 서 는 파일 화 를 설정 합 니 다. 구체 적 인 방법 은 다음 과 같 습 니 다.
1. 시작 클래스 계승 WebMvcConfigurerAdapter
2. WebMvcConfigurerAdapter 를 계승 하기 위해 @ Configuration 주 해 를 따로 작성 합 니 다 (추천)
import java.util.List;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.longge.LoginUserInfoMethodArgumentResolver;
@SpringBootApplication
public class MyBootApplication extends WebMvcConfigurerAdapter{
public static void main(String[] args) {
SpringApplication.run(MyBootApplication.class, args);
}
@Override
public void addArgumentResolvers(List argumentResolvers) {
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(new LoginUserInfoMethodArgumentResolver());
}
}
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import com.longge.utils.Constant;
import com.longge.utils.RedisCacheUtils;
/**
* session dto
*/
public class LoginUserInfoMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public Object resolveArgument(MethodParameter arg0, ModelAndViewContainer arg1, NativeWebRequest arg2,
WebDataBinderFactory arg3) throws Exception {
String token = arg2.getHeader(Constant.TOKEN_KEY);
if(StringUtils.isNotBlank(token)) {
return RedisCacheUtils.getUserInfo(token);
}
return null;
}
@Override
public boolean supportsParameter(MethodParameter arg0) {
return arg0.getParameterType().equals(UserInfo.class);
}
}
사용 방법:
@ApiOperation(" ")
@PutMapping("add")
public ResponseResult add(UserInfo userInfo, @Valid @RequestBody SupplierDto supplierDto) {
// UserInfo , LoginUserInfoMethodArgumentResolver class
}
위 에 서 는 클 라 스 류 를 직접 사용 하 는 방식 이 고, 다음은 주해 방식 으로 이 루어 집 니 다.
import java.lang.annotation.*;
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CurrentUser {
}
import com.chinamobile.annation.CurrentUser;
import com.chinamobile.dto.CurrentUserData;
import com.chinamobile.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Autowired
private RedisUtil redisUtil;
public CurrentUserMethodArgumentResolver() {
}
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(CurrentUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
String accessToken = webRequest.getHeader("authorization");
if (StringUtils.isEmpty(accessToken)) {
return null;
}
Object object = redisUtil.get(accessToken);
if (object instanceof CurrentUserData) {
return object;
}
return null;
}
}
이곳 의 RedisUtil 은 redis 의 처리 류 로 스스로 실현 하면 된다.
import com.CurrentUserMethodArgumentResolver;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.List;
@Configuration
@Slf4j
public class ApiConfig extends WebMvcConfigurerAdapter {
/**
* bean
*
* @return
*/
@Bean
public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {
return new CurrentUserMethodArgumentResolver();
}
@Override
public void addArgumentResolvers(List argumentResolvers) {
argumentResolvers.add(currentUserMethodArgumentResolver());
}
}
아래 와 같이 사용:
/**
*
*
* @param userId
* @param addUserModel
* @param currentUserData
* @return
*/
@PutMapping(value = "/users/{userId}")
public CommonResponse updateUser(@PathVariable("userId") Integer userId,
@RequestBody AddUserModel addUserModel,
@CurrentUser CurrentUserData currentUserData) {
CommonResponse commonResponse = new CommonResponse<>();
try {
Integer updateBy = currentUserData.getUserId();
//
if (userId == null) {
commonResponse.setCode(ResponseCode.PARAMETER_ERROR);
commonResponse.setMsg(" , ");
log.info("Parameter check failed.");
}else {
commonResponse.setCode(ResponseCode.SUCCESS);
commonResponse.setMsg(" .");
log.info("Update user info success.");
}
} catch (Exception ex) {
log.error("SERVER_ERROR: " + ex);
commonResponse.setCode(ResponseCode.SERVER_ERROR);
commonResponse.setMsg("SERVER_ERROR");
}
return commonResponse;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.