在web项目中,controller的返回值一般有两种,一种是返回对应的页面(例如html页面,jsp页面),一种是返回数据(例如json格式的数据)。
使用@Controller注解,返回视图与参数
@Controller
public class UserController {
@Resource
private IUserService userService;
@RequestMapping("/userLogin")
public String userLogin(@Param("userName") String userName){
//返回对应的名为success的页面
return "success";
}
@RequestMapping("/userLogin_1")
public ModelAndView userLogin_1(){
//返回对应的名为success的页面
return new ModelAndView("success");
}
@RequestMapping("/getUsers")
@ResponseBody
public List<Department> getUsers(){
List<User> users=userService.findAllUsers();
//@ResponseBody注解,返回json格式的数据
return users;
}
@RequestMapping(value = "/User", method = RequestMethod.GET)
public ModelAndView init(ModelAndView mv, @Validated UserForm paramsUserForm, BindingResult bindingResult) throws Exception {
// 画面权限检测
if (!commonCheck.checkAuthority(userInfo, "User")) {
mv.setViewName("error");
return mv;
}
Map<String, Object> resultMap = userService.init(paramsUserForm);
mv.setViewName("UserInfoPage");
mv.addObject("userInfo", resultMap.get("userInfo"));
mv.addObject("equipmentList", resultMap.get("equipmentList"));
//返回视图与参数
return mv;
}
}
使用@RestController注解,返回json数据
相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面,返回的内容就是Return 里的内容
@RestController
public class TestController {
@RequestMapping("/user")
public User test(){
User user = new User();
user.setId(new BigDecimal(1234));
user.setSex("women");
user.setUserName("dfgdf");
return user;
}
}
结果:{"id":1234, "sex":"women","userName":"dfgdf"}
springboot项目返回视图时,前后缀都是有默认值的,也可以自己定义
application.properties
##############################
#jsp path
#spring.view.prefix=/WEB-INF/page/
#spring.view.suffix=.jsp
#html
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
#关闭缓存
spring.thymeleaf.cache=false