简述Spring 注解的两个@RestController与@Controller之间的区别。
总结:
1、@RestController用于返回像json类型的数据,等价于@Controller+@ResponseBody同样可以返回json类型数据。
2、另外,@Controller还可以返回指定页面,而@RestController不能返回指定页面,只能返回数据。
分析:
开发RESTful API 时,一般都会在Controller上加上@Controller注解,但是有时候加上@RestController
1、@RestController注解等价于@ResponseBody + @Controller。
2、共同点:@RestController和@Controller都可以用来表示Spring某个类是否可以接收HTTP请求
3、不同点:@RestController无法返回指定页面,而@Controller可以
4、@RestController可以直接返回数据,@Controller需要@ResponseBody辅助。但是@RestController无法返回指定页面,而@Controller可以。
5、如果需要返回JSON,XML或自定义mediaType内容到页面,@RestController自己就可以搞定,这个注解对于返回数据比较方便,因为它会自动将对象实体转换为JSON格式。 而@Controller需要在对应的方法加上@ResponseBody注解。
@RestController
@RequestMapping("/showList")
public class ListController {
@RequestMapping(value="findAll", method = RequestMethod.GET)
public List<User> findAll(){
//查询所有
List<User> users = new ArrayList<User>();
User user1 = new User();
user1.setUsername("杨过1");
user1.setPassword("123456");
user1.setAge(18);
user1.setSex("男");
User user2 = new User();
user2.setUsername("杨过2");
user2.setPassword("123456");
user2.setAge(18);
user2.setSex("男");
User user3 = new User();
user3.setUsername("杨过3");
user3.setPassword("123456");
user3.setAge(18);
user3.setSex("男");
users.add(user1);
users.add(user2);
users.add(user3);
return users ;
}
}
通过@Controller访问页面
源码
@ConfigurationProperties(
prefix = "spring.resources",
ignoreUnknownFields = false
)
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"};
...
...
根据spring ResourceProperties定义,默认的静态资源路径为:
• classpath:/META-INF/resources/
• classpath:/resources/
• classpath:/static/ 常用静态资源目录
• classpath:/public
我们只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。 我们习惯会把静态资源放在classpath:/static/ 目录下。在resources目录下创建index.html文件
直接访问 http://localhost:8080/index.html 也可以 通过controller由其他页面跳转也可以
@Controller
@RequestMapping("/welcomePage")
public class loginController(){
@GetMapping(value="/login")
public String login(){
return "index"; //跳转到视图层indexn.html
}
}