一。定义创建统一返回的格式 和定义枚举
package com.baking.baking.zander.enums;
/**
* @author: Zander
* @description: 错误返回通用枚举
*/
public enum ResponseEnum {
/**
* 成功
*/
SUCCESS(0, "successful"),
/**
* 失败
*/
FAILURE(-1, "服务器错误");
private int code;
private String msg;
ResponseEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
package com.baking.baking.zander.response;
import com.baking.baking.zander.enums.ResponseEnum;
import lombok.Data;
import java.io.Serializable;
/**
* @author: Zander
* @description: 统一返回
*/
@Data
public class Response implements Serializable {
private static final long serialVersionUID = 7352795226774903119L;
private boolean success = true;
private int code;
private String msg;
private Object data;
public Response() {
}
public Response(ResponseEnum result) {
this.code = result.getCode();
this.msg = result.getMsg();
}
public Response(ResponseEnum result, Object data) {
this.code = result.getCode();
this.msg = result.getMsg();
this.data = data;
}
@Override
public String toString() {
return "Response{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
二。定义 BaseController 让每个 业务Controller 去继承 BaseController
package com.baking.baking.zander.base;
import com.baking.baking.zander.enums.ResponseEnum;
import com.baking.baking.zander.response.Response;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author Zander
* @description: BaseController
*/
public abstract class BaseController {
@InitBinder
public void initBinder(ServletRequestDataBinder binder) {
/**
* 自动转换日期类型的字段格式
*/
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));
}
protected HttpServletRequest request;
protected HttpServletResponse response;
@ModelAttribute
public void setRequestAndResponse(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
}
protected Response renderError(ResponseEnum responseEnum) {
Response response = new Response(responseEnum);
response.setSuccess(false);
return response;
}
protected Response renderError(String msg) {
Response response = new Response();
response.setSuccess(false);
response.setCode(ResponseEnum.FAILURE.getCode());
response.setMsg(msg);
return response;
}
protected Response renderSuccess(String msg) {
Response response = new Response();
response.setMsg(msg);
response.setCode(ResponseEnum.SUCCESS.getCode());
return response;
}
protected Response renderSuccess(Object obj) {
return new Response(ResponseEnum.SUCCESS, obj);
}
/**
* redirect跳转
*
* @param url 目标url
*/
protected String redirect(String url) {
return "redirect:" + url;
}
}
三。实际业务场景使用
package com.baking.baking.controller;
import com.baking.baking.entity.dto.UserDTO;
import com.baking.baking.entity.dto.UserLoginDTO;
import com.baking.baking.entity.dto.UserPageDTO;
import com.baking.baking.entity.vo.AdminUserVO;
import com.baking.baking.service.IAdminUserService;
import com.baking.baking.zander.base.BaseController;
import com.baking.baking.zander.response.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* <p>
* 前端控制器
* </p>
*
* @author Zander123
* @since 2020-06-22
*/
@Api(tags = "User API")
@RestController
@RequestMapping("/adminUser")
public class AdminUserController extends BaseController {
private final IAdminUserService adminUserService;
@Autowired
public AdminUserController(IAdminUserService adminUserService) {
this.adminUserService = adminUserService;
}
@ApiOperation("用户登陆")
@PostMapping("/login")
@ResponseBody
Response login(@RequestBody @Valid UserLoginDTO userDTO){
AdminUserVO adminUserVO = adminUserService.login(userDTO);
if(adminUserVO !=null){
return renderSuccess(adminUserVO);
}
return renderError("用戶名密碼錯誤或該用戶已被管理員限制登錄!");
}
@ApiOperation("添加用戶")
@PostMapping("/add")
@ResponseBody
Response add(@RequestBody @Valid UserDTO userDTO){
String resultStr = adminUserService.add(userDTO);
if(resultStr.equals("SUCCESS")){
return renderSuccess(resultStr);
}else{
return renderError(resultStr);
}
}
}