SpringBoot入门项目-基于JPA的App日记后台系统之Controller层的编写(四)

提要

本系列文章主要为带领SpringBoot初学者入门,本人也是一名初学者,文章若有不足之处,还望大家提出批评,加以指正!

注意:本系列文章为项目入门篇,非SpringBoot基础入门篇,如无SpringBoot相关基础的童鞋推荐慕课网廖师兄的入门教程

[2小时学会Spring Boot]
[Spring Boot进阶之Web进阶]

本人的开发环境及软件版本(仅供参考)

操作系统 : macOS 10.13.2 
JDK : 1.8
Tomcat : 8.5.27
IntelliJ IDEA : 2017.3.2 (Ultimate Edition)
MySQL : 5.7.21
Reids : 4.0.7

目录


注解说明

Controller层代码的编写相对于Service层来说要简单很多,项目中最复杂的部分都放在了Service层中进行处理。我们先来了解下Controller层中常用的注解。

  1. @RestController Spring4之后新加的注解,就是@Controller+@ResponseBody,@Controller用于告知Spring这是一个控制器,这个类中的方法,就是相应的动作。@ResponseBody用于格式化内容,以JSON格式返回至前端。
  2. @RequestMapping 用于处理请求地址映射的注解,可用于类及方法上,代表请求的路径。
  3. @Slf4j 是lombok下的一个注解,它是用来进行log日志输出的,标记了这个注解后,该类可直接使用log.xxx()进行日记记录。
  4. @GetMapping 是用来标记该请求为get请求的,是@RequestMapping(method = RequestMethod.GET)方法的缩写,value里的内容是指定的路径。
  5. @PostMapping 是用来标记该请求为post请求,其余同上。
  6. @Autowired 这个类是用来负责自动装配的。举个栗子
    @Autowired
    private NoteService noteService;
    这里如果不添加@Autowired注解的话,那么使用noteService的时候还得先进行实例化操作。

UserController

现在新建controller包,然后在包下新建UserController类

@RequestMapping
@RestController
public class UserController {

    @Autowired
    private UserService service;

    /**
     * 请求参数(必传)
     * userId userName userPwd
     *
     * @param infoEntity
     * @return
     * @throws Exception
     */
    @PostMapping(value = "/register")
    public ResultVO register(UserInfoEntity infoEntity) throws Exception {
        return ResultVOUtil.success(service.userRegister(infoEntity));
    }

    /**
     * 请求参数(必传)
     * userId userPwd
     *
     * @param loginEntity
     * @return
     * @throws Exception
     */
    @GetMapping(value = "/login")
    public ResultVO login(UserLoginEntity loginEntity, HttpServletResponse servletResponse) throws Exception {
        return ResultVOUtil.success(service.userLogin(loginEntity, servletResponse));
    }

    /**
     * 获取个人资料
     *
     * @return
     * @throws Exception
     */
    @GetMapping(value = "/info")
    public ResultVO info(HttpServletRequest servletRequest) throws Exception {
        return ResultVOUtil.success(service.userInfo(servletRequest));
    }

    /**
     * 请求参数(必传)
     * oldPwd newPwd token
     *
     * @param infoDTO
     * @return
     * @throws Exception
     */
    @PostMapping(value = "/updatePwd")
    public ResultVO updatePwd(HttpServletRequest servletRequest, UserInfoDTO infoDTO) throws Exception {
        service.updatePwd(servletRequest, infoDTO);
        return ResultVOUtil.success();
    }

    /**
     * 请求参数(必传)
     * userProfile
     *
     * @param infoDTO
     * @return
     * @throws Exception
     */
    @PostMapping(value = "/updateProfile")
    public ResultVO updateProfile(HttpServletRequest servletRequest, UserInfoDTO infoDTO) throws Exception {
        service.updateProfile(servletRequest, infoDTO);
        return ResultVOUtil.success();
    }

    /**
     * 该接口非必要
     *
     * @return
     * @throws Exception
     */
    @PostMapping(value = "/logout")
    public ResultVO logout(HttpServletRequest servletRequest) throws Exception {
        service.userLogout(servletRequest);
        return ResultVOUtil.success();
    }
}

NoteController

新建NoteController类

@RestController
@RequestMapping
@Slf4j
public class NoteController {

    @Autowired
    private NoteService noteService;

    /**
     *
     * @param page
     * @param size
     * @return
     * @throws Exception
     */
    @GetMapping(value = "/getNote")
    public ResultVO noteList(HttpServletRequest servletRequest,
                             @RequestParam(value = "page", defaultValue = "1") Integer page,
                             @RequestParam(value = "size", defaultValue = "10") Integer size) throws Exception {
        PageRequest pageRequest = new PageRequest(page - 1, size);

        return ResultVOUtil.success(noteService.noteList(servletRequest, pageRequest).getContent());
    }

    /**
     * 请求参数(必传)
     * userId token noteContent noteTitle
     *
     * @param noteDTO
     * @return
     * @throws Exception
     */
    @PostMapping(value = "/addNote")
    public ResultVO add(HttpServletRequest servletRequest, UserNoteDTO noteDTO) throws Exception {
        log.error("这是传递进来的UserNoteDTO=>{}", noteDTO.toString());
        return ResultVOUtil.success(noteService.addNote(servletRequest, noteDTO));
    }

    /**
     * 请求参数(必传)
     * noteId noteContent noteTitle
     *
     * @param noteDTO
     * @return
     * @throws Exception
     */
    @PostMapping(value = "/updateNote")
    public ResultVO update(HttpServletRequest servletRequest, UserNoteDTO noteDTO) throws Exception {
        log.error("这是传递进来的UserNoteDTO=>{}", noteDTO.toString());
        return ResultVOUtil.success(noteService.updateNote(servletRequest, noteDTO));
    }

    @PostMapping(value = "/deleteNote")
    public ResultVO delete(HttpServletRequest servletRequest, UserNoteDTO noteDTO) throws Exception {
        noteService.delNote(servletRequest, noteDTO);
        log.error("noteDTO => {}", noteDTO);
        return ResultVOUtil.success();
    }
}

以上两个Controller类中的内容都大同小异,Controller层中无需进行任何的逻辑计算,只需要把需要的参数传入到Service层中让Service进行处理后并返回即可。

本人在写Controller层中的一个习惯就是传入的参数是与数据库进行交互的都是采用的javaBean形式进行操作,这样的一个好处就是代码上比较简洁,另外添加功能或是字段的时候在实体类中进行添加也较为方便,但是在维护上却有一个很大的缺点,就是阅读性比较差,别人看你代码的话还要进入到Service层中看处理部分再整理出用到了哪些参数。所以使用这种方法的时候我建议大家在方法上要进行注释,把用到的参数给注明好。

Controller层的内容就这么多,下一章便是本系列的最终章节,将会给大家讲解Redis+Token+Cookie结合使用判断用户授权状态。


项目地址

本项目的完整项目代码的github地址

https://github.com/BigWolfDean/springboot-simple-project

如果本项目对大家有一些帮助的话,麻烦给个star,fork一下,谢谢!


本系列文章目录

SpringBoot入门项目-基于JPA的App日记后台系统之项目的搭建与配置(一)

SpringBoot入门项目-SpringBoot入门项目-基于JPA的App日记后台系统之数据库的创建与JPA的CRUD(二)

SpringBoot入门项目-基于JPA的App日记后台系统之利用Exception处理自定义错误信息(三)

SpringBoot入门项目-SpringBoot入门项目-基于JPA的App日记后台系统之Controller层的编写(四)

SpringBoot入门项目-基于JPA的App日记后台系统之利用Redis与Cookie处理用户权限校验(五)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值