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

xiaoxiao2021-02-28  71

前一篇介绍了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 @EnableWebMvc public 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"}) @ResponseBody public Student getJson(Student stu) { stu.setName("apple"); return stu; } @RequestMapping(value = "/getXml",produces = "application/xml;charset=UTF-8") @ResponseBody public 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

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

@ControllerAdvice public 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中

@InitBinder public 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都有设定的值

@ModelAttribute public 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) {}

转载请注明原文地址: https://www.6miu.com/read-85605.html

最新回复(0)