论在SpringBoot中@Controller和@RestController的区别
@Controller官方 文档:表示带注释的类是“控制器”(例如Web控制器)。
@RestController官方文档:@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
翻译过来就是@RestController是由 @ResponseBody 和@Controller注结合而成。
笔者在学习过程中通过save方法添加成员的时候,发现虽然添加成功但是Postman返回404,通过请教大佬才知道,用@RestController可以返回json数据,用@Controller不能返回json数据
是在类上加,不是在方法上加,因为@Controller是类的控制器。
代码:
package com.kude.stu.kudestu.stu.controller;
import com.kude.stu.kudestu.stu.entity.User;
import com.kude.stu.kudestu.stu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;
import java.util.List;
/**
* 处理用户信息的控制层
*
* @author liyage
*/
//@ResponseBody
//@Controller
//@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
private User user;
/**
* 查询用户的方法
*/
@ResponseBody
@RequestMapping("/findAll")
public List<User> findAll() {
return userService.findAll();
}
@ResponseBody
@RequestMapping("/findById")
public User findUserById(int id){
return userService.findUserById(id);
}
/**
* 注册用户
*
*/
@RequestMapping(value="/reg",method = RequestMethod.POST)
public User reg(User user){
return userService.save(user);
}
/**
* 删除用户
*/
@ResponseBody
@RequestMapping(value="/del",method = RequestMethod.POST)
public void del(int id){
userService.deleteById(id);
System.out.println("删除成功");
}
}
结果:
原数据库数据:
postman执行结果:
运行后数据库:
添加@RestController注解后:
运行结果:
数据库:
参考资料:https://blog.csdn.net/gg12365gg/article/details/51345601