2017-06-22 179 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