spring实用注解(二)--springMvc注解

来源:互联网 发布:sniffer java 报错 编辑:程序博客网 时间:2024/06/06 01:27
前一篇介绍了spring基本的实用注解,本文将对springMVC注解进行介绍。
一、开启springMvc的注解
1、@EnableWebMvc
开启对spring web mvc支持的配置类,此注解会开启一些默认配置,如ViewResolver等。
2、定制spring mvc需要在加注解@EnableWebMvc类上,实现接口
org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter,
并且加上映射器viewResolver、
静态资源映射、
拦截器等
如:
@ComponentScan("com.dragon.springStudy")@Configuration@EnableWebMvcpublic class SpringWebConfig extends WebMvcConfigurerAdapter {    @Bean    public InternalResourceViewResolver viewResolver(){        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();        viewResolver.setPrefix("/WEB-INF/classes/views/");        viewResolver.setSuffix(".jsp");        viewResolver.setViewClass(JstlView.class);        return viewResolver;    }    @Override    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");    }    @Bean    public MultipartResolver multipartResolver(){        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();        commonsMultipartResolver.setMaxUploadSize(1000000);        return commonsMultipartResolver;    }    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(simpleInterceptor());    }    @Override    public void addViewControllers(ViewControllerRegistry registry) {        super.addViewControllers(registry);        registry.addViewController("directPage").setViewName("directPage");        registry.addViewController("servletAsync").setViewName("servletAsync");    }    @Bean    public SimpleInterceptor simpleInterceptor(){        return new SimpleInterceptor();    }}

3、对于加注解@EnableWebMvc的springMvc配置类,需要在实现org.springframework.web.WebApplicationInitializer接口的类来加载springMvc配置类,
WebApplicationInitializer是用来配置servlet3.0+配置的接口,用来代替配置文件web.xml的功能,
如:
public class WebInitializer implements WebApplicationInitializer {    @Override    public void onStartup(ServletContext servletContext) throws ServletException {        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();        ctx.register(SpringWebConfig.class);        ctx.setServletContext(servletContext);        ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher",new DispatcherServlet(ctx));        servlet.addMapping("/");        servlet.setLoadOnStartup(1);        servlet.setAsyncSupported(true); //开启servlet3.0+的异步方法支持    }}

二、springMvc常用注解

1、@Controller

声明控制器

2、@RequestMapping

映射web请求,注解在类上或方法上,

内部有参数,

value,表示路径,如value="path";

produces,表示返回的媒体类型和字符集

如返回json数据,则有

@RequestMapping(value = "/getJson", produces = {"application/json;charset=utf-8"})@ResponseBody
如返回xml数据,则有

@RequestMapping(value = "/getXml",produces = "application/xml;charset=UTF-8")@ResponseBody

如返回文本,则有

@RequestMapping(value = "/getText" ,produces = {"text/plain;charset=utf-8"})@ResponseBody

实例如:

@RequestMapping(value = "/getJson", produces = {"application/json;charset=utf-8"})@ResponseBodypublic Student getJson(Student stu) {    stu.setName("apple");    return stu;}@RequestMapping(value = "/getXml",produces = "application/xml;charset=UTF-8")@ResponseBodypublic Student getXml(Student stu){    stu.setName("apple");    return stu;}

备注:添加json和xml的maven依赖

<dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.6.0</version></dependency><dependency>    <groupId>com.fasterxml.jackson.dataformat</groupId>    <artifactId>jackson-dataformat-xml</artifactId>    <version>2.6.0</version></dependency>

3、@ResponseBody

将返回值直接给用户,而不是表示逻辑页面

4、@RequestBody

表示请求参数在request请求体中,而不是在url后面

5、@RequestParam

表示接收请求参数

6、@PathVariable

用来接收路径中的参数

7、@RestController

是一个组合注解,是@Controller和@ResponseBody的组合,表示是一个控制器,且直接返回结果

8、@ControllerAdivce

注解在类上,开启对控制器全局配置,

@ControllerAdvicepublic class BaseControllerAdvice {}

在类内部方法上,有几下注解进行全局配置:

a)@ExceptionHandler

全局处理控制器内的异常,如

@ExceptionHandler(value = Exception.class)public String exceptionHandler(Exception e, WebRequest request, Model model){    model.addAttribute("errorMsg",e.getMessage());    return "error";}

b)@InitBinder

用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中

@InitBinderpublic void initBinder(WebDataBinder webDataBinder){    webDataBinder.setDisallowedFields("name"); //忽略name值的绑定,注意是model中,如自定义的Student实例对象    webDataBinder.registerCustomEditor(Date.class,new MyDateEditor());  //定义string到Date的映射}//自定义Date绑定格式class MyDateEditor extends PropertyEditorSupport{    @Override    public void setAsText(String text) throws IllegalArgumentException {        try {            Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(text);            setValue(date);        } catch (ParseException e) {            e.printStackTrace();        }    }}

c)@ModelAttribute

全局绑定键值对到Model中,也就是绑定后,全局controller内的model都有设定的值

@ModelAttributepublic void addDate(Model model){    model.addAttribute("nowDate", DateFormatUtils.format(new Date(),"yyyy-MM-dd hh:mm:ss"));}
当然也可以在请求方法内,通过注解@ModelAtttribute获取绑定的值,如:

@RequestMapping("/")public String index(@ModelAttribute("nowDate") String nowDate) {}


原创粉丝点击