电子商务网站建设与管理目录,网站设计文档,全球邮企业邮箱登录入口,怎么看自己网站的空间系列文章目录 提示#xff1a;这里可以添加系列文章的所有文章的目录#xff0c;目录需要自己手动添加 SpringMVC之注解的使用 提示#xff1a;写完文章后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、注解的使用Co…系列文章目录 提示这里可以添加系列文章的所有文章的目录目录需要自己手动添加 SpringMVC之注解的使用 提示写完文章后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、注解的使用ControllerControllerRequestParamRequestHeaderCookieValueSessionAttributesModelAttributePathVariablePostMapping、GetMapping、PutMapping、DeleteMappingResponseBodyRestControllerRequestBody 总结 前言
提示这里可以添加本文要记录的大概内容
通过注解我们可以在代码中轻松地标识和配置 SpringMVC 的组件如控制器、视图、请求映射等。这种方式大大减少了冗余的配置文件提高了开发效率。 在本博客中我们将深入探讨 SpringMVC 中注解的使用。我们将了解注解的基本概念和工作原理学习如何使用注解来创建控制器、处理请求和渲染视图。此外我们还将探讨一些常见的注解以及如何通过注解进行参数传递和验证。 无论是 SpringMVC 的新手还是有经验的开发者本博客都将提供有价值的信息和实际示例帮助你更好地理解和应用注解来简化你的 Web 开发工作。 提示以下是本篇文章正文内容下面案例可供参考
一、注解的使用
Controller
作用标记控制器将控制器交给Spring容器管理。 位置类上方
import org.springframework.stereotype.Controller;Controller
public class MyController {// 处理请求的方法public void handleRequest(HttpServletRequest request, HttpServletResponse response) {// 在此编写请求处理逻辑}
}在上述示例中我们创建了一个名为MyController的类并在其上添加了Controller注解。这样该类就被标记为一个 SpringMVC 控制器。 Controller注解通常与RequestMapping注解一起使用来指定控制器处理的请求路径。
Controller
作用给控制器方法设置请求路径 位置方法或类上方。用于类上表示类中的所有控制器方法都是以该地址作为父路径。 属性
value/path:请求路径method:指定请求方式params:规定必须发送的请求参数headers:规定请求必须包含的请求头
Controller
RequestMapping(/c3)
public class MyController3 {/*访问路径为 /c3/annotation1支持post和get请求请求时必须带有age参数请求时必须带有User-agent请求头*/RequestMapping(path /my_path,method {RequestMethod.GET,RequestMethod.POST},params {age},headers {User-agent})public String annotation1(String username){System.out.println(username);return index;}
}在上述示例中我们使用RequestMapping注解指定了控制器处理的根路径为/my_path也就是说当用户在浏览器输入的是/my_path路径则访问的方法就是annotation1。并且规定请求方法必须为GET方法必须包含参数age必须带有请求头User-agent。
RequestParam
作用在控制器方法中获取请求参数 位置方法参数前 属性
name指定请求参数名称defaultValue 为参数设置默认值required设置是否是必须要传入的参数
/*定义请求的参数名为username默认值为sxt不是必须的参数*/
RequestMapping(/annotation2)
public String annotation2(RequestParam(name username,defaultValue sxt,required false) String name){System.out.println(name);return index;
}
特别注意在以下场景中使用RequestParam注解是必要的
强制请求参数存在如果你的方法需要一个特定的请求参数才能正常工作并且该参数是必需的那么可以使用RequestParam注解并将required属性设置为true。这样可以确保在调用该方法时请求中必须包含指定的参数否则会抛出异常。明确请求参数的名称当请求参数的名称与方法参数的名称不一致时可以使用RequestParam注解来指定请求参数的名称。这样可以让 Spring Web 框架正确地将请求参数的值绑定到方法参数上。处理默认值如果你希望在请求参数不存在时为方法参数提供一个默认值可以使用RequestParam注解并设置defaultValue属性。这样当请求中没有提供该参数时方法参数将使用默认值。类型转换如果请求参数的类型与方法参数的类型不匹配并且你希望进行类型转换可以使用RequestParam注解并提供相应的转换规则。这样Spring Web 框架会在参数绑定时进行类型转换。 总的来说使用RequestParam注解可以更好地控制请求参数的处理确保方法的正确性和可靠性。但在一些简单的情况下也可以根据参数的位置或名称来获取请求参数的值而无需使用RequestParam注解。
RequestHeader
作用在控制器方法中获取请求头数据 位置方法参数前 Controller
public class MyController {RequestMapping(/annotation3)public void handleRequest(RequestHeader(name My-Header) String headerValue) {// 获取请求头 My-Header 的值并进行处理System.out.println(请求头 My-Header 的值为 headerValue);}
}在上述示例中我们在handleRequest方法的参数上使用RequestHeader注解指定了请求头的名称为My-Header。当有一个名为My-Header的请求头传递给该方法时它会将该请求头的值绑定到方法参数headerValue上。 注RequestParam注解主要用于获取请求参数指问号后的参数如url?a1b2也可以用于获取请求头中的数据。而RequestHeader是用来专门获取请求头的数据。
CookieValue
作用在控制器方法中获取Cookie数据 位置方法参数前
/*获取User-Agent请求头获取JSESSIONID的Cookie值*/
RequestMapping(/annotation4)
public String annotation4(RequestHeader(User-Agent) String userAgent, CookieValue(JSESSIONID) String jSessionId){System.out.println(userAgent);System.out.println(jSessionId);return index;
}在上述示例中我们在处理方法的参数上使用CookieValue注解指定了 cookie 的名称为JSESSIONID。当有一个名为JSESSIONID的 cookie 传递给该方法时它会将该 cookie 的值绑定到方法参数cookieValue上。 通过使用CookieValue注解我们可以直接在方法参数上获取 cookie 的值而无需在代码中手动解析 cookie。 CookieValue注解还可以配置其他属性如是否必填、默认值等以满足更具体的需求。
SessionAttributes
作用将Model模型中的数据存到session域中 位置类上方
Controller
RequestMapping(/c4)
// 将模型中的name数据保存到session中
SessionAttributes(name)
public class MyController4 {RequestMapping(/t1)public String t1(Model model){// model中保存name数据model.addAttribute(name,张三);return index;}RequestMapping(/t2)public String t2(HttpSession session){// 从session中获取name数据System.out.println(session.getAttribute(name));return index;}
}
在上述示例中SessionAttributes作用在MyController4那么只要保存在model模型里的数据都会保存在session域中所以在t2方法中可以直接获取name的值。
ModelAttribute
作用1设置指定方法在控制器其他方法前执行 位置方法上方
Controller
RequestMapping(/c5)
public class MyController5 {ModelAttributepublic void before(){System.out.println(前置方法);}RequestMapping(/t1)public String t1(){System.out.println(t1);return baizhan;}
}
在上述示例中因为before方法上有ModelAttribute所以放进入到/c5/..方法的时候会优先执行before方法再执行/c5/..。作用2从Model模型中获取数据给参数赋值 位置方法参数前
Controller
RequestMapping(/c6)
public class MyController6 {// 前置方法向Model中设置数据ModelAttributepublic void before(Model model){model.addAttribute(name,张三);}// 该参数不是从请求中获取而是从Model中获取RequestMapping(/t1)public String t1(ModelAttribute(name) String name){System.out.println(name);return baizhan;}
}
在上述代码中t1中的name属性的值来自model中而model的值来自方法before中
PathVariable
作用在RESTful风格的URL中获取占位符的值 位置方法参数前 属性
value获取哪个占位符的值作为参数值如果占位符和参数名相同可以省略该属性。
import org.springframework.web.bind.annotation.PathVariable;// 在一个控制器方法上使用 PathVariable 注解
// 路径中的{id}表示占位符最后会封装到方法的参数中使用
// 如果占位符和参数名相同可以省略PathVariable的value属性
GetMapping(/users/{id})
public User getUser(PathVariable(id) Long id) {// 通过PathVariable 注解获取 URL 中的 id 值并进行后续操作return repository.findById(id);
}在上述示例中GetMapping(“/users/{id}”)注解将/users/{id}路径与该方法进行关联。PathVariable(“id”)注解用于将 URL 中的{id}部分标记为路径变量。当调用/users/1这样的 URL 时Spring 会将{id}的值解析为1并将其传递给方法中的id参数。 通过使用PathVariable注解你可以方便地在 Spring Web 应用中处理 URL 路径变量。 注 大家仔细一点可以看见方法上面使用的是GetMapping注解而不是RequestMapping注解。PathVariable注解用于从 URL 路径中提取变量值并将其传递给处理方法的参数。而GetMapping、PostMapping、DeleteMapping和PutMapping是 Spring Web 框架中的注解用于定义不同类型的 HTTP 请求的映射。 当我们使用这些注解时可以方便地在处理方法中获取 URL 路径中的变量值从而实现动态路由和参数传递。 例如假设有一个接口用于获取用户详细信息其 URL 路径可能是/users/{id}。通过使用GetMapping(“/users/{id}”)注解来映射这个路径并使用PathVariable(“id”)来提取{id}部分的值我们可以在处理方法中获取到用户的 ID并根据这个 ID 来查询和返回相应的用户详细信息。 同样的道理对于其他类型的 HTTP 请求如 POST 请求用于创建新用户、DELETE 请求用于删除用户等我们也可以使用类似的方式通过注解和路径变量来提取和处理相应的参数。 这样做的好处是使得我们的代码更加简洁、易读并且能够更好地与 URL 路径进行解耦。同时也方便了在不同的请求类型和路径下进行统一的参数处理和路由管理。
PostMapping、GetMapping、PutMapping、DeleteMapping
作用简化设置请求方式的RequestMapping写法
PostMapping注解用于处理 POST 请求通常用于创建资源。GetMapping注解用于处理 GET 请求通常用于获取资源。GetMapping注解用于处理 GET 请求通常用于获取资源。DeleteMapping注解用于处理 DELETE 请求通常用于删除资源。
位置方法上方。
RestController
public class MyController {PostMapping(/myResource)public void createMyResource(RequestBody MyResource resource) {// 创建资源的逻辑}GetMapping(/myResource/{id})public MyResource getMyResource(PathVariable(id) Long id) {// 获取资源的逻辑}PutMapping(/myResource/{id})public void updateMyResource(PathVariable(id) Long id, RequestBody MyResource resource) {// 更新资源的逻辑}DeleteMapping(/myResource/{id})public void deleteMyResource(PathVariable(id) Long id) {// 删除资源的逻辑}
}在上述示例中PostMapping注解用于处理 POST 请求将请求体的数据映射到MyResource对象并调用createMyResource方法进行资源的创建。GetMapping注解用于处理 GET 请求通过路径变量{id}获取资源的 ID并调用getMyResource方法获取资源。PutMapping注解用于处理 PUT 请求同样通过路径变量{id}获取资源的 ID并将请求体的数据映射到MyResource对象调用updateMyResource方法进行资源的更新。DeleteMapping注解用于处理 DELETE 请求通过路径变量{id}获取资源的 ID并调用deleteMyResource方法删除资源。 这些注解使得我们可以更加方便地定义不同请求类型的处理方法并与 URL 路径进行解耦。同时Spring Framework 会根据注解的信息自动生成相应的 HTTP 请求映射从而简化了开发过程。
ResponseBody
作用方法返回的对象转换为JSON格式并将JSON数据直接写入到输出流中使用此注解后不会再经过视图解析器。使用该注解可以处理Ajax请求。 位置方法上方或方法返回值前
RestController
public class MyController {GetMapping(/myResource)ResponseBodypublic MyResource getMyResource() {// 获取资源的逻辑return new MyResource(Hello, World!);}
}在上述示例中GetMapping注解表示该方法处理 GET 请求/myResource是请求的路径。ResponseBody注解表示方法的返回值将直接作为 HTTP 响应的内容返回给客户端。 当调用http://your-domain.com/myResource这样的 URL 时客户端将接收到一个包含Hello, World!的响应。 使用ResponseBody注解可以方便地将复杂的数据对象作为 HTTP 响应的内容返回而无需手动进行格式转换。同时它也提供了一种简洁的方式来处理 RESTful 风格的 API 接口。
RestController
作用结合了Controller和ResponseBody注解的功能。使用RestController注解的类会被视为一个控制器其中的方法默认会被注解为ResponseBody。这意味着这些方法的返回值将直接作为 HTTP 响应的内容返回给客户端而不需要额外的视图解析或模板渲染。总的来说就是控制器类下的所有控制器方法都返回JSON格式数据且不进行跳转 位置类上方
RestController
public class MyController {GetMapping(/myResource)public String getMyResource() {// 获取资源的逻辑return Hello, World!;}
}在上述示例中GetMapping注解表示该方法处理 GET 请求/myResource是请求的路径。方法的返回值将直接作为 HTTP 响应的内容返回给客户端。 当调用http://your-domain.com/myResource这样的 URL 时客户端将接收到一个包含Hello, World!的响应。 使用RestController注解可以使控制器的代码更加简洁和直观同时也提供了一种便捷的方式来处理简单的 HTTP 请求和响应。如果你的控制器方法主要用于返回数据而不需要复杂的视图渲染或模板逻辑那么使用RestController注解是一个不错的选择。
RequestBody
作用将请求中JSON格式的参数转为JAVA对象 位置写在方法参数前 Axios请求发送JSON格式的参数
// 导入 Axios 库
const axios require(axios);// 定义请求数据
const resource {name: My Resource,description: This is a description,
};// 发送 POST 请求
axios.post(/myResource, resource).then(response {// 处理响应数据console.log(response.data);}).catch(error {// 处理错误情况console.error(error);});编写控制器
RestController
public class MyController {PostMapping(/myResource)public void createMyResource(RequestBody MyResource resource) {// 创建资源的逻辑}
}在上述示例中PostMapping注解表示该方法处理 POST 请求/myResource是请求的路径。RequestBody注解修饰的MyResource参数将接收请求体的内容并将其解析为MyResource对象。 当调用http://your-domain.com/myResource这样的 URL 时客户端可以将MyResource对象的 JSON 数据作为请求体的内容发送。Spring 会将请求体的内容解析为MyResource对象并将其传递给方法。 使用RequestBody注解可以方便地处理请求体的数据而无需手动解析和转换数据格式。同时它也提供了一种简洁的方式来处理 POST 请求的参数。 总结
提示这里对文章进行总结
在 SpringMVC 框架中注解是一种非常重要的配置方式它可以帮助我们减少冗余的 XML 配置提高开发效率。