提要
本系列文章主要为带领SpringBoot初学者入门,本人也是一名初学者,文章若有不足之处,还望大家提出批评,加以指正!
注意:本系列文章为项目入门篇,非SpringBoot基础入门篇,如无SpringBoot相关基础的童鞋推荐慕课网廖师兄的入门教程
本人的开发环境及软件版本(仅供参考)
操作系统 : 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层中常用的注解。
- @RestController Spring4之后新加的注解,就是@Controller+@ResponseBody,@Controller用于告知Spring这是一个控制器,这个类中的方法,就是相应的动作。@ResponseBody用于格式化内容,以JSON格式返回至前端。
- @RequestMapping 用于处理请求地址映射的注解,可用于类及方法上,代表请求的路径。
- @Slf4j 是lombok下的一个注解,它是用来进行log日志输出的,标记了这个注解后,该类可直接使用log.xxx()进行日记记录。
- @GetMapping 是用来标记该请求为get请求的,是@RequestMapping(method = RequestMethod.GET)方法的缩写,value里的内容是指定的路径。
- @PostMapping 是用来标记该请求为post请求,其余同上。
- @Autowired 这个类是用来负责自动装配的。举个栗子
@Autowired
这里如果不添加@Autowired注解的话,那么使用noteService的时候还得先进行实例化操作。
private NoteService 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地址
如果本项目对大家有一些帮助的话,麻烦给个star,fork一下,谢谢!
本系列文章目录
SpringBoot入门项目-基于JPA的App日记后台系统之项目的搭建与配置(一)
SpringBoot入门项目-SpringBoot入门项目-基于JPA的App日记后台系统之数据库的创建与JPA的CRUD(二)
SpringBoot入门项目-基于JPA的App日记后台系统之利用Exception处理自定义错误信息(三)
SpringBoot入门项目-SpringBoot入门项目-基于JPA的App日记后台系统之Controller层的编写(四)