Fetch the repository succeeded.
# Spring 主要注解说明
### @SpringBootApplication
> 等价于 @Configuration,@EnableAutoConfiguration和@ComponentScan 一起使用
### @Configuration
> 标注一个类为配置类
### @EnableAutoConfiguration
> 这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用并相应地对Spring进行设置。
### @ComponentScan
> 使用@ComponentScan注解自动收集所有的Spring组件,包括@Configuration类
### @Controller
> 标注表示 Application 类是一个处理 HTTP 请求的控制器
### @RequestMapping
> 标注的方法都会用来处理对应 URL 的请求
### @ResponseBody
> 标注的方法返回一个对象,则会自动将该对象转换为 JSON 字符串返回
### @GetMapping("/")
> 意味着在浏览器中访问http://localhost:8080/(不考虑协议、host 和 port 信息后的路径为"/")后浏览器发送的请求会交给该方法进行处理
> @RequestMapping("/hello", method = RequestMethod.GET)
> 用法举例:@GetMapping("/users/{username}")
### @PostMapping
> @RequestMapping("/hello", method = RequestMethod.POST)
### @PutMapping
> @RequestMapping("/hello", method = RequestMethod.PUT)
### @DeleteMapping
> @RequestMapping("/hello", method = RequestMethod.DELETE)
### @PathVariable
> @GetMapping("/users/{username}")
> public String userProfile(@PathVariable("username") String username) {
> return String.format("user %s", username);
> }
>
> // 多个传入参数
> @GetMapping("/users/{username}/blogs/{blogId}")
> public String getUserBlog(@PathVariable String username, @PathVariable int blogId) {
> //具体实现,略
> }
>
> // 传入参数使用正则表达式过滤
> @GetMapping("/users/{username:[a-z0-9_]+}")
> public String getUserBlog(@PathVariable String username) {
> //具体实现,略
> }
>
> URL 路由中设置这样的包含 / 且变长的变量规则
> https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-patterns
>
> 在设计 API 时,我们经常需要对参数或者 Header 进行校验, @RequestMapping 的 params 和 headers 参数可以帮助我们
> https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-params-and-headers
### 学习标记 第4课 @RequestParam
### @RequestParam
> @GetMapping("/user")
> @ResponseBody
> public String getInfo(@RequestParam("id") String id) {
> UserInfo userInfo = this.userInfo;
> ArrayList<UserInfo.User> users = userInfo.getUsers();
> for (User user : users) {
> if (user.getId().equals(id)) {
> return user.toString();
> }
> }
> return "Not found!";
> }
> @RequestParam VS @PathVariable
> 那么究竟应该如何选择呢?我们建议:
> 1. 当 URL 指向的是某一具体业务资源(或者资源列表) ,例如博客、用户时,使用
> @PathVariable
> 2. 当 URL 需要对资源或者资源列表进行过滤、筛选时,用 @RequestParam
> 例如我们会这样设计 URL:
> /blogs/{blogId}
> /blogs?state=publish 而不是 /blogs/state/publish 来表示处于发布状态的博
> 客文章
> /**
> * 对数据进行分页处理
> * 举例: /users/paging?page=1
> * @param page
> * @return
> */
> @GetMapping("/users/paging")
> @ResponseBody
> public String getUsersPaging(@RequestParam(name = "page", required = false, defaultValue = "1") int page) {
> UserInfo userInfo = UserInfo.getInstance();
> ArrayList<UserInfo.User> users = userInfo.getUsers();
> String content = "";
> int pageSize = 10;
> //int usersSize = users.size();
> int begPos = (page - 1) * pageSize;
> int endPos = begPos + pageSize;
>
> int index = 0;
> for (User user : users) {
> index ++;
> if (index >= begPos && index <= endPos)
> content += user.toString() + "<br/>";
> else {
> if (index < begPos)
> continue;
> else
> break;
> }
> }
> return content;
> }
### @Size 和 @Valid
> @Size(min=2, max=30) 表示对应属性的字符串长度必须在 2 到 30 之间。
> 此外,可以通过 message 属性来设置验证的信息,比如 @Size(min=2, max=30,
> message="博客标题长度为 2-30") ,那么验证失败时将可以返回 message 信息。
> 当然,用于描述验证的规则的标注还有很多,大家可以在这里了解,今后的学习中我们还
> 会介绍更多注解的应用场景。
>
> public class UserInfo {
> public static class User {
> @Size(min = 1)
> private String id;
>
> @Size(min = 2)
> private String name;
>
> @Size(min = 4, max = 6)
> private String gender;
>
> @Size(min = 3)
> private String email;
>
> @Size(min = 2)
> private String city;
> ...
> ...
>
>
> @Controller
> public class SubmitController {
>
> @GetMapping(value = "/submit.do")
> public String getSubmitPage() {
> return "submit_page";
> }
>
> @PostMapping(value = "/create.do")
> public String submitDeal(@Valid UserInfo.User user)
> {
> ...
### @ModelAttribute 与 RedirectAttributes
> Flash Attributes 的概念和使用场景
> 在 Controller 中访问 Flash Attributes
> 在模板中访问 Flash Attributes
>
> @PostMapping(value = "/searchItem.do")
> public String getSearchItem(@RequestParam String findingContent,
> @RequestParam String findingKeyWord,
> Model model,
> final RedirectAttributes redirectAttributes
> ) {
>
> UserInfo userInfo = UserInfo.getInstance();
> ArrayList<UserInfo.User> users = userInfo.getUsers();
> List<UserInfo.User> outcomeUserList = new ArrayList<UserInfo.User>();
> if (findingKeyWord.equals("id")) {
> for (User user : users) {
> if (user.getId().equals(findingContent)) {
> outcomeUserList.add(user);
> }
> }
> } else if (findingKeyWord.equals("email")) {
> for (User user : users) {
> if (user.getEmail().equals(findingContent)) {
> outcomeUserList.add(user);
> }
> }
> } else {
> redirectAttributes.addFlashAttribute("message", "指定的查找关键词不正确!");
> return "redirect:/messageBox.do";
> //return "redirect:/message.do?message=" + CharCodeTrans.toISO_8859_1("指定的查找关键词不正确!");
> }
>
> if (outcomeUserList.isEmpty()) {
> redirectAttributes.addFlashAttribute("message", "找不到指定联系人!");
> return "redirect:/messageBox.do";
> //return "redirect:/message.do?message=" + CharCodeTrans.toISO_8859_1("找不到指定联系人!");
> }
>
> model.addAttribute("usersList", outcomeUserList);
> //redirectAttributes.addFlashAttribute("usersList", outcomeUserList);
> return "search_page";
> }
> ...
> ...
> /**
> * 使用 session 方式
> * @param message
> * @param model
> * @return
> */
> @GetMapping(value = "/messageBox.do")
> public String getMessageBox(@ModelAttribute("message") String message,
> Model model) {
> System.out.println(message);
> model.addAttribute("tipMessage", message);
> return "message_page";
> }
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。