Spring中@Service注解的作用与@Controller和@RestController之间区别是什么

其他教程   发布日期:2024年10月31日   浏览次数:379

本篇内容介绍了“Spring中@Service注解的作用与@Controller和@RestController之间区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、@Service注解

@Service注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容器中,不需要再在applicationContext.xml文件定义bean了。在Controller模块中可以通过@Autowired注入service类。直接调用service类中方法。

  1. @Service
  2. @Primary
  3. public class YtDesignInfoServiceImpl implements YtDesignInfoService {
  4. @Autowired
  5. private YtDesignInfoMapper ytDesignInfoMapper;
  6. @Override
  7. public YtDesignInfo getItem(String GCID){
  8. YtDesignInfoExample example = new YtDesignInfoExample();
  9. YtDesignInfoExample.Criteria criteria = example.createCriteria();
  10. criteria.andLProjectidEqualTo(GCID);
  11. List<YtDesignInfo> ytDesignInfos = ytDesignInfoMapper.selectByExample(example);
  12. return ytDesignInfos.get(0);
  13. }
  14. }
  1. @RestController
  2. @Api(tags = "YantuController", value = "岩土管理")
  3. @RequestMapping("/yantu")
  4. public class YanTuController {
  5. @Autowired
  6. private YtDesignInfoService ytDesignInfoService;
  7. @Autowired
  8. private YtDuanmianService ytDuanmianService;
  9. @ApiOperation(value = "新增岩土成果的工程信息")
  10. @PostMapping(value = "/addYanTuItemInfo")
  11. public CommonResult<?> addYanTuInfo(Principal principal, @Validated YtDesignInfo ytDesignInfo) {
  12. if (principal == null) {
  13. return CommonResult.unauthorized(null);
  14. }
  15. int i = ytDesignInfoService.addItem(ytDesignInfo);
  16. if (i>0) {
  17. return CommonResult.success("上传成功");
  18. } else {
  19. return CommonResult.failed("上传失败");
  20. }
  21. }
  22. }

二、@Controller和@RestController的区别

1. @controller注解

  • @Controller 将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。当然也有语义化的作用,即代表该类是充当Controller的作用。

  • @ResponseBody 它的作用简短截说就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端,本人尝试了一下,如果返回的是String类型,则仍然是String。

  • 假如返回类型是Map类型,但是没有加@ResponseBody注解,只有@Controller修饰的时候,Spring以为会返回一个View(也就是MVC中的那C)但是返回的东西却是一个Map,页面会报错。

  1. @Controller
  2. public class FileUploadController {
  3. //跳转到上传文件的页面
  4. //在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。
  5. @RequestMapping(value="/gouploadimg", method = RequestMethod.GET)
  6. public String goUploadImg() {
  7. //跳转到 templates 目录下的 uploadimg.html
  8. return "uploadimg";
  9. }
  10. //处理文件上传
  11. //若返回json等内容到页面,则需要加@ResponseBody注解
  12. //如果返回的是String类型,则仍然是String。
  13. @RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
  14. @ResponseBody
  15. public String uploadImg(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
  16. System.out.println("调用文件上传方法");
  17. String contentType = file.getContentType();
  18. String fileName = file.getOriginalFilename();
  19. return filename;
  20. }
  21. }

2. @RestController注解

相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

  1. @RestController /* @Controller + @ResponseBody*/
  2. public class HospitalController {
  3. //注入Service服务对象
  4. @Autowired
  5. private HospitalService hospitalService;
  6. /**
  7. * 查询所有医院信息(未分页)
  8. */
  9. //@RestController注解可以直接返回json数据
  10. //@Controller注解无法返回json数据
  11. @RequestMapping(value = "findAllHospital",method = RequestMethod.GET)
  12. public List<Hospital> findAllHospital(){
  13. List<Hospital> hospitalList= hospitalService.findAllHospital();
  14. return hospitalList;
  15. }
  16. }

以上就是Spring中@Service注解的作用与@Controller和@RestController之间区别是什么的详细内容,更多关于Spring中@Service注解的作用与@Controller和@RestController之间区别是什么的资料请关注九品源码其它相关文章!