备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决!
上一篇:springboot-基础-eclipse配置+helloword示例
目录
- 添加model和controller的例子
- 注解开发
- 使用@RestController 大坑
- Model ModelMap和ModelAndView的区别
添加model和controller的例子
文件结构:
User.java
package com.example.demo.model;public class User {private String name;private String sex;private String hobby;public User() {super();}public User(String name, String sex, String hobby) {super();this.name = name;this.sex = sex;this.hobby = hobby;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}}
UserController.java
package com.example.demo.controller;import com.example.demo.model.User;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;@Controller
public class UserController {@RequestMapping(value="/user")public String index(Model model) {List<User> users = new ArrayList<User>();users.add(new User("name1", "male", "略略略"));users.add(new User("name2", "female", "singing"));users.add(new User("小猪佩奇", "雄性", "社会人"));model.addAttribute("users", users);return "user";}}
user.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8" /><title>test</title>
</head>
<body><table><tr><td>Name</td><td>Sex</td><td>Hobby</td><td>性别</td></tr><tr th:each="user:${users}" th:object="${user}"><td th:text="${user.name}"></td><td th:text="${user.sex}"></td><td th:text="${user.hobby}"></td><!-- 这里类似模糊查找 --><td th:text="*{name}"></td></tr></table>
</body>
</html>
application properties添加一点配置:
#国际化配置
spring.messages.basename=i18n/messages
spring.messages.encoding=UTF-8
结果:
注解开发
restful风格是一种开发想法,现行技术并没有完全实现。注解就是下表中的一些标记,这些标记带有特殊功能。
<context:component-scan/>
标签默认情况下自动扫描指定路径下的包(含所有子包),将带有@Component
、@Repository
、@Service
、@Controller
标签的类自动注册到spring容器。对标记了 Spring’s @Required
、@Autowired
、JSR250’s @PostConstruct
、@PreDestroy
、@Resource
、JAX-WS’s @WebServiceRef
、EJB3’s @EJB
、JPA’s @PersistenceContext
、@PersistenceUnit
等注解的类进行对应的操作使注解生效(包含了annotation-config标签的作用)。
使用@RestController 大坑
这个注解相当于@ResponseBody 和 @Controller两个注解的组合,不返回视图,只返回数据。如果一个类上加了这个注解,那么这个类的函数都是返回不了视图的,return "redirect:/seq_tool/seq_order_details"
;也会只在页面上显示return的字符串。
解决方法是把类上的注解改为@Controller
,然后给不返回视图,只返回数据的函数加上注解@ResponseBody
,如
@RequiresPermissions("seq_tool:getcfmd")
@PostMapping(value="/getcfmd")
@ResponseBody
public PageResult getCfmd(String userid) {SeqOrderConditionVO vo = new SeqOrderConditionVO();PageInfo<SeqOrder> pageInfo = sysSeqOrderService.listCfmdByUserId(userid, vo);return ResultUtil.tablePage(pageInfo);
}
Model ModelMap和ModelAndView的区别
例子
- model
@RequestMapping(value = "/index1")public String index1(Model model) {model.addAttribute("result", "后台返回index1");return "result";}
- ModelMap
@RequestMapping(value = "/index2")public String index2(ModelMap model) {model.addAttribute("result", "后台返回index2");return "result";}
- ModelAndView
@RequestMapping(value = "/index3")public ModelAndView index3() {ModelAndView mv = new ModelAndView("result");// ModelAndView mv = new ModelAndView();// mv.setViewName("result");mv.addObject("result", "后台返回index3");return mv;}
@RequestMapping(value = "/index4")public ModelAndView index4() {Map<String, String> map = new HashMap<String, String>();map.put("result", "后台返回index4");return new ModelAndView("result", map);}