使用DefaultAnnotationHandlerMapping的Spring @EnableWebMvc配置

时间:2016-11-08 16:58:45

标签: java spring configuration

我开始从基于XML的配置转移到@EnableWebMvc和WebMvcConfigurerAdapter配置。但是当我更改配置时,它似乎从DefaultAnnotationHandlerMapping切换到RequestMappingHandlerAdapter。

如果我想切换回DefaultAnnotationHandlerMapping,我该如何设置呢?

(我知道不推荐使用DefaultAnnotationHandlerMapping,但我仍然想知道如何设置spring来使用它)

1 个答案:

答案 0 :(得分:0)

javadoc of @EnableWebMvc

  

将此批注添加到@Configuration类可导入Spring   来自WebMvcConfigurationSupport [...]

的MVC配置

其中WebMvcConfigurationSupport

  

此类注册以下HandlerMappings

     
      
  • RequestMappingHandlerMapping在0处排序,用于将请求映射到带注释的控制器方法。
  •   
  • HandlerMapping从1开始,将URL路径直接映射到视图名称。
  •   
  • BeanNameUrlHandlerMapping在2处命令将URL路径映射到控制器bean名称。
  •   
  • HandlerMappingInteger.MAX_VALUE-1订购,以提供静态资源请求。
  •   
  • HandlerMappingInteger.MAX_VALUE处命令将请求转发到默认servlet。
  •   

RequestMappingHandlerMapping来自的地方。这个"默认"配置或多或少等同于指定

<mvc:annotation-driven />

在XML配置中。

如果你想要DefaultAnnotationHandlerMapping提前RequestMappingHandlerMapping @Bean public DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping() { DefaultAnnotationHandlerMapping defaultAnnotationHandlerMapping = new DefaultAnnotationHandlerMapping(); defaultAnnotationHandlerMapping.setOrder(-1); // and other properties return defaultAnnotationHandlerMapping; } ,那么为它声明你自己的bean并将其顺序设置得更低。

HandlerMapping

如果您希望这是DispatcherServlet中唯一注册的"handlerMapping",请将bean命名为false并将DispatcherServlet#detectAllHandlerMappings属性设置为class client(): def __init__(self, host, port): self.host = host self.port = port self.socket = self.connect() self.command = commands() def connect(self): ''' Connect to a remote host. ''' try: import socket return socket.create_connection((self.host, self.port)) except socket.error: print(":: Failed to connect to a remote port : ") def sendCommand(self, comm): ''' Send command to remote host Returns server output ''' comman = comm.encode() # for case in switch(comman): # if case(self.command.RETRV_FILES_LIST.encode()): # self.socket.send(b'1') # return self.recvData() # if case(): # print(":: Got wrong command") if (comman == b'1'): self.socket.send(b'1') return self.recvData() def recvData(self): ''' Receives all the data ''' i = 0 total_data = [] while(True): data = self.socket.recv(1024) if not data: break total_data.append(data) i += 1 if i > 9: break return total_data