重写addArgumentResolvers后不生效
来源:3-7 分布式session下
Happydak
2018-09-23
1 问题描述
按照老师上课敲得代码,通过重写addArgumentResolvers实现token信息获取时总是失败【在进入到商品controller时不能获取到User信息】,然后总是报错误:EL1007E: Property or field ‘nickname’ cannot be found on null;就是通过重写addArgumentResolvers时不能有效获取到User信息
2 代码
2.1 配置类
@Configuration
//@Slf4j
public class WebConfig extends WebMvcConfigurerAdapter {
@Autowired
public MiaoshaUserArgumentResolver miaoshaUserArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
// log.info("=============hello");
// resolvers.add(new MiaoshaUserArgumentResolver());
resolvers.add(miaoshaUserArgumentResolver);
}
}
2.2 MiaoshaUserArgumentResolver
package com.xunyji.miaosha.config;
import com.sun.deploy.net.HttpResponse;
import com.xunyji.miaosha.domain.model.MiaoshaUser;
import com.xunyji.miaosha.service.MiaoshaUserService;
import com.xunyji.miaosha.service.impl.MiaoshaUserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
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;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author 王杨帅
* @create 2018-09-23 21:25
* @desc
**/
@Component
//@Slf4j
public class MiaoshaUserArgumentResolver implements HandlerMethodArgumentResolver {
@Autowired
private MiaoshaUserServiceImpl miaoshaUserServiceImpl;
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
Class<?> parameterType = methodParameter.getParameterType();
return parameterType == MiaoshaUser.class;
}
@Override
public Object resolveArgument(
MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
HttpServletResponse response = nativeWebRequest.getNativeResponse(HttpServletResponse.class);
String paramToken = request.getParameter(MiaoshaUserServiceImpl.COOKI_NAME_TOKEN);
String cookieToken = getCookieValue(request, MiaoshaUserServiceImpl.COOKI_NAME_TOKEN);
if (paramToken == null && paramToken == null) {
return null;
}
String token = StringUtils.isEmpty(paramToken) ? cookieToken : paramToken;
// log.info("token: " + token);
MiaoshaUser byToken = miaoshaUserServiceImpl.getByToken(response, token);
// log.info("byToken:" + byToken);
return byToken;
}
private String getCookieValue(HttpServletRequest request, String cookiNameToken) {
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals(cookiNameToken)) {
return cookie.getValue();
}
}
return null;
}
}
2.3 GoodsController
package com.xunyji.miaosha.controller;
import com.xunyji.miaosha.domain.model.MiaoshaUser;
import com.xunyji.miaosha.service.MiaoshaUserService;
import com.xunyji.miaosha.service.impl.MiaoshaUserServiceImpl;
import com.xunyji.miaosha.utils.redis.MiaoshaUserKey;
import com.xunyji.miaosha.utils.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* @author 王杨帅
* @create 2018-09-23 20:27
* @desc
**/
@Controller
@RequestMapping(value = "/goods")
@Slf4j
public class GoodsController {
@Autowired
private RedisUtil redisUtil;
@Autowired
private MiaoshaUserService miaoshaUserService;
@GetMapping(value = "/to_list")
public String toList(
Model model,
// HttpServletResponse response,
// @CookieValue(value = MiaoshaUserServiceImpl.COOKI_NAME_TOKEN, required = false) String cookieToken,
// @RequestParam(value = MiaoshaUserServiceImpl.COOKI_NAME_TOKEN, required = false) String paramToken
// ,
MiaoshaUser miaoshaUser
) {
// if (cookieToken == null && paramToken == null) {
// return "login";
// }
// String token = paramToken != null ? paramToken : cookieToken;
// MiaoshaUser miaoshaUser = miaoshaUserService.getByToken(response, token);
log.info("获取到的用户细腻Wie:" + miaoshaUser);
model.addAttribute("user", miaoshaUser);
return "goods_list";
}
}
写回答
1回答
-
这个打断点 单步调试一下吧
122018-10-12
相似问题
延长有效期时为了什么
回答 1
关于减库存和生成订单
回答 1