package com.zskj.smart_wok.controller;
import com.zskj.smart_wok.bean.CurrentInfo;
import com.zskj.smart_wok.service.bean.ApiResult;
import com.zskj.smart_wok.service.bean.ResponseData;
import com.zskj.smart_wok.service.exception.BusinessException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Objects;
/**
* @author ck
* @date 2018-11-09
*/
public abstract class BaseApiController {
@Value("${wx.app-id}")
protected String wxAppId;
@Value("${wx.app-secret}")
protected String wxAppSecret;
/**
* 获得登录人信息
*
* @return
*/
protected CurrentInfo getCurrentFromAuth() {
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
return (CurrentInfo) request.getAttribute(CurrentInfo.PRINCIPAL_ATTRIBUTE_NAME);
}
/**
* 错误信息
*
* @param bindingResult
* @return
*/
protected ResponseData errorMsg(BindingResult bindingResult) {
List<ObjectError> allErrors = bindingResult.getAllErrors();
StringBuilder errorStr = new StringBuilder();
for (ObjectError error : allErrors) {
errorStr.append(error.getDefaultMessage()).append(" ");
}
return ResponseData.error(errorStr.toString());
}
/**
* 参数校验
*
* @param currentFromAuth
* @param objs
*/
protected void checkCommonParam(CurrentInfo currentFromAuth, Object... objs) {
if (Objects.isNull(currentFromAuth)) {
throw new BusinessException(ApiResult.INVALID_AUTH);
}
for (int i = 0; i < objs.length; i++) {
if (Objects.isNull(objs[i])) {
throw new BusinessException(ApiResult.PARAM_IS_ILLEGAL);
}
}
}
/**
* 校验参数为空
*
* @param objs
*/
protected void checkNullParam(Object... objs) {
if (Objects.isNull(objs)) {
throw new BusinessException(ApiResult.PARAM_IS_ILLEGAL);
}
for (int i = 0; i < objs.length; i++) {
if (Objects.isNull(objs[i])) {
throw new BusinessException(ApiResult.PARAM_IS_ILLEGAL);
}
}
}
ResponseData handleNotValidResult(BindingResult bindingResult) {
List<ObjectError> allErrors = bindingResult.getAllErrors();
StringBuilder sb = new StringBuilder();
for (ObjectError allError : allErrors) {
String defaultMessage = allError.getDefaultMessage();
sb.append(defaultMessage);
sb.append("\r\n");
}
ResponseData responseData = new ResponseData();
responseData.setCode(ApiResult.PARAM_IS_ILLEGAL.getCode());
responseData.setMsg(sb.toString());
return responseData;
}
}
CurrentInfo类
package com.zskj.smart_wok.bean;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
/**
* 登录信息bean
*
* @author zgq
*/
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class CurrentInfo implements Serializable {
/**
* "身份信息"参数名称
*/
public static final String PRINCIPAL_ATTRIBUTE_NAME = CurrentInfo.class.getName() + ".PRINCIPAL";
/**
* 用户ID
*/
private Long userId;
/**
* 账号
*/
private String username;
/**
* 昵称
*/
private String nickname;
/**
* token
*/
private String accessToken;
private static final long serialVersionUID = -2338669778607213069L;
}
@GetMapping("list")
@ApiOperation(value = "获取我的菜谱列表(C)", response = CookbookVO.class)
@ApiResponse(code = 40075, message = "获取菜谱分享码失败")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "分页页数", paramType = "query", required = false, dataTypeClass = Integer.class),
@ApiImplicitParam(name = "pageSize", value = "每页数量", paramType = "query", required = false, dataTypeClass = Integer.class)
})
public ResponseData cookbookList(PageParam pageParam) {
checkCommonParam(getCurrentFromAuth());
AppPage<CookbookVO> CookbookVOS = cookbookService.querySelective(getCurrentFromAuth().getUserId(), pageParam);
return ResponseData.ok(CookbookVOS);
}
备注:详细请参考smark-work-parent项目