2017-06-22 113 views
1

我已经实现了一个使用Spring.My restController代码如下给出的休息webservice。我已经创建了拦截器,你已经在上面的帖子中提出了建议。我能够得到休息响应但请求没有得到intercepted.Could请你帮我找出什么是错我的代码:`拦截器与弹簧REST服务

import java.lang.reflect.Method; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.web.method.HandlerMethod; 
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; 
class WebConfig extends WebMvcConfigurerAdapter { 

     @Override 
     public void addInterceptors(InterceptorRegistry registry) { 
      registry.addInterceptor(new HandlerInterceptorAdapter() { 

      Logger logger = LoggerFactory 
        .getLogger(WebConfig.class); 
      @Override 
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
       if (handler instanceof HandlerMethod) { 
        logger.info("Request URL::"); 
        HandlerMethod handlerMethod = (HandlerMethod) handler; 
       //  Method method = handlerMethod.getMethod(); 
       /** logger.info("{} - {} - method '{}' on controller '{}'", 
         request.getMethod(), request.getRequestURI(), method.getName(), 
         handlerMethod.getBean().getClass() 
        );*/ 
        logger.info("Request URL::" + request.getRequestURL().toString() 
         + ":: Start Time=" + System.currentTimeMillis()); 
       } 
       return true; 
      } 
      }); 
     } 
    } 

`

@RestController 
    @RequestMapping(/v1/search) 
    public class RestController { 
     @Autowired 
     @Qualifier("repoService") 
     private IRepoService repoService; 
     private static final Logger logger = Logger.getLogger(RestController.class); 
     @RequestMapping(value = "/{id}" ,method = RequestMethod.GET)  

     public List<RepVO> getRepById(@PathVariable String id) 
      List<RepVO> repVOList = repoService.getRepById(id); 
      logger.info("Response received");  

      return repVOList ; 


     } 


    } 

我已经添加的配置文件作为below.Still它不工作:

@EnableWebMvc 
@Configuration 
class WebConfig extends WebMvcConfigurerAdapter { 

     @Override 
     public void addInterceptors(InterceptorRegistry registry) { 
      registry.addInterceptor(new HandlerInterceptorAdapter() { 

      Logger logger = LoggerFactory 
        .getLogger(WebConfig.class); 
      @Override 
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
       if (handler instanceof HandlerMethod) { 
        logger.info("Request URL::"); 
        HandlerMethod handlerMethod = (HandlerMethod) handler; 
       //  Method method = handlerMethod.getMethod(); 
       /** logger.info("{} - {} - method '{}' on controller '{}'", 
         request.getMethod(), request.getRequestURI(), method.getName(), 
         handlerMethod.getBean().getClass() 
        );*/ 
        logger.info("Request URL::" + request.getRequestURL().toString() 
         + ":: Start Time=" + System.currentTimeMillis()); 
       } 
       return true; 
      } 
      }); 
     } 
    } 
+0

wouldnt它更有意义使用@ControllerAdvice并与该实现ResponseBodyAdvice?在我看来你有更多的灵活性,并且你可以改变响应的主体 –

回答

1

您需要@ComponentScan

与配置类的

@EnableWebMvc 
@Configuration 

,然后扫描包来注释配置类

+0

感谢你的回复。我在我的配置类中添加了上述查询中更新的注释。它仍然没有工作。不知道什么可以是原因。 – AJS

+0

您是否添加了@ @ ComponentScan? – fg78nc

+0

我在applicationContext.xml中添加了以下内容 AJS