Spring MVC中常用注解

Spring MVC 框架提供了一系列注解,用于简化开发者的编码工作,并提高代码的可读性和可维护性。以下是 Spring MVC 中常用的注解:

@Controller:

用于标识一个类为控制器,通常用于处理用户请求。

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

@RestController:

@RestController注解实际上相当于@Controller和@ResponseBody注解的组合。它的作用是将一个控制器类标识为RESTful风格的控制器,并指示Spring将控制器方法的返回值直接转换为JSON或XML格式,并将其作为HTTP响应返回给客户端

@RestController
public class MyRestController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

@RequestMapping:

用于映射HTTP请求URL到控制器的处理方法上,可以用于类级别和方法级别。常用属性包括value(URL路径)、method(请求方法)、params(请求参数)、headers(请求头)等。

@Controller
@RequestMapping("/example")
public class ExampleController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

@PathVariable:

用于将URL路径中的占位符绑定到控制器方法的参数上,常用于获取RESTful风格URL中的参数。

@Controller
public class MyController {

    @GetMapping("/hello/{name}")
    public String hello(@PathVariable("name") String name) {
        return "Hello, " + name + "!";
    }
}

@RequestParam:

用于将请求参数绑定到控制器方法的参数上,常用于获取HTTP请求中的参数值。

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello(@RequestParam("name") String name) {
        return "Hello, " + name + "!";
    }
}

@RequestBody:

用于将HTTP请求体中的数据绑定到控制器方法的参数上,常用于处理POST请求中的JSON或XML数据。

@RestController
public class MyRestController {

    @PostMapping("/user")
    public String createUser(@RequestBody User user) {
        return "User created: " + user.toString();
    }
}

@ResponseBody:

用于将控制器方法的返回值直接转换为JSON或XML格式,并将其作为HTTP响应返回给客户端。

@Controller
public class MyRestController {

    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "Hello, World!";
    }
}

@ModelAttribute:

用于将请求参数绑定到模型对象上,通常用于将表单数据传递给控制器方法。

@Controller
public class MyController {

    @PostMapping("/user")
    public String createUser(@ModelAttribute User user) {
        return "User created: " + user.toString();
    }
}

@SessionAttributes:

用于指定控制器类中哪些模型属性需要存储在会话(Session)中,以便多个请求之间共享数据。

@Controller
@SessionAttributes("user")
public class MyController {

    @GetMapping("/setUser")
    public String setUser(Model model) {
        User user = new User("John");
        model.addAttribute("user", user);
        return "user";
    }

    @GetMapping("/getUser")
    public String getUser(@ModelAttribute("user") User user) {
        return "Hello, " + user.getName() + "!";
    }
}

@Valid:

用于启用数据验证功能,并将验证结果存储到BindingResult对象中。

@Controller
public class MyController {

    @PostMapping("/user")
    public String createUser(@Valid @ModelAttribute User user, BindingResult result) {
        if (result.hasErrors()) {
            return "error";
        }
        return "User created: " + user.toString();
    }
}

@InitBinder:

用于自定义数据绑定规则,通常用于注册自定义的属性编辑器(PropertyEditor)或校验器(Validator)。

@Controller
public class MyController {

    @PostMapping("/user")
    public String createUser(@Valid @ModelAttribute User user, BindingResult result) {
        if (result.hasErrors()) {
            return "error";
        }
        return "User created: " + user.toString();
    }
}

@ExceptionHandler:

用于处理控制器方法中抛出的异常,可用于定义全局异常处理器或局部异常处理器。

@Controller
public class MyController {

    @ExceptionHandler(Exception.class)
    public String handleException(Exception ex) {
        return "error";
    }

    @GetMapping("/hello")
    public String hello() throws Exception {
        throw new Exception("Something went wrong");
    }
}

@DateTimeFormat:

接收形参时,根据不同的日期格式设置不同的接收方式

//日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
//使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
                  @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
                  @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
    System.out.println("参数传递 date ==> "+date);
    System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
    System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
    return "{'module':'data param'}";
}

注意事项

传递日期类型参数必须在配置类上使用@EnableWebMvc注解。其功能之一:根据类型匹配对应的类型转换器。

@EnableWebMvc:

开启自动转换json数据的支持

@Configuration
@ComponentScan("com.itheima.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}

注意事项:

@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换

在Controller中编写方法接收json参数

//集合参数:json格式
//1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
//2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
    System.out.println("list common(json)参数传递 list ==> "+likes);
    return "{'module':'list common for json param'}";
}

@EnableWebMvc注解介绍

  • 名称:@EnableWebMvc
  • 类型:配置类注解
  • 位置:SpringMVC配置类定义上方
  • 作用:开启SpringMVC多项辅助功能
  • 范例:
@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nuage0110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值