即使用 DefaultAnnotationHandlerMapping
WEB-INF/
name-servlet.xml中需要:
<!--
自動掃描的包名 -->
<context:component-scan
base-package="com.gome.memberFront.web" />
<mvc:annotation-driven
/>
對於@Controller標註的類,以及這種類裏的方法,可以使用@RequestMapping("url路徑")註解來指定其處理來自何url的請求 。
例如:
@Controller
@RequestMapping("complaint")
public class MyController {
@RequestMapping("getComplaintList")
public Object getComplaintList(HttpServletRequest request, HttpServletResponse response) {
}
}
則該類處理來自 web應用部署路徑/complaint的請求,該方法處理來自 web應用部署路徑/complaint/getComplaintDiffs的請求。
類處的參數("value")可以省略,讓方法處的參數改爲("complaint/getComplaintList")即可。
@RequestMapping不但支持標準的URL,還支持帶?、 * 、** 、{xxx}佔位符的URL,例如:
/user/*/createUser 匹配/user/aaa/createUser
/user/**/createUser 匹配/user/aaa/bbb/createUser 、 /user/createUser
/user/createUser?? 匹配/user/createUseraa
/user/{userId} 匹配user/123
在對應方法中,形參位置,可以使用(@PathVariable("userId"),將url中的實參與形參進行綁定
在處理類中,最後要返回ModelAndView,準備下一步通過ViewResolver解析
處理方法簽名(view向controller傳值)
1,使用@RequestParam綁定請求參數值,RequestParam有三個參數,value(參數名)、required(是否必須)、defaultValue(默認參數名,不常用):
@Controller
@RequestMapping("complaint")
public class MyController {
@RequestParam(value="userName",required=false)String userName;}
2,使用@CookieValue綁定請求中的Cookie值
public class MyController {
@CookieValue(value="sessionId",required=false)String sessionId;}
3,使用@RequestHeader綁定請求報文頭的屬性值
public class MyController {
@RequestHeader(value="Accept-Encoding")String encoding;}
在controller的函數參數中增加一個 Model m,在函數體中使用m.addAttribute("key",value),可以將值傳入view
使用json作爲數據傳輸媒介:
不再需要向view層傳ModelAndView,而是需要配置好json相應的類型轉換器等,如下
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="jsonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
然後可以在controller最後使用@ResponseBody,表示該方法的返回結果直接寫入HTTP response body中,方法的返回值也不再是ModelAndView,而是String或者Object
由此,便可以將Map或者對象以json的形式返回前端。