天天看点

requestbody自定义参数校验_SpringBoot2.0针对请求参数@RequestBody验证统一拦截

title: "SpringBoot2.0针对请求参数@RequestBody验证的统一拦截"

categories: SpringBoot2.0 Shiro

tags: SpringBoot2.0 Shiro

author: LIUREN

SpringBoot2.0针对请求参数@RequestBody验证统一拦截

针对SpringBoot2中请求参数统一进行拦截处理问题

第一步:建立请求实体类RequetsUserEntity.java

RequetsUserEntity.java

package io.renren.modules.wx.vo;

import java.io.Serializable;

import javax.validation.constraints.NotBlank;

import io.swagger.annotations.ApiModel;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

@Data

@ApiModel(description = "RequetsUserEntity")

public class RequetsUserEntity implements Serializable{

private static final long serialVersionUID = 8841143276870083920L;

@ApiModelProperty(value = "appid")

@NotBlank(message="不能为空")

private String appid;

@ApiModelProperty(value = "code")

@NotBlank(message="不能为空")

private String code;

@ApiModelProperty(value = "微信昵称")

@NotBlank(message="不能为空")

private String nickName;

@ApiModelProperty(value = "0未知  1男性  2女性")

@NotBlank(message="不能为空")

private String gender;

@ApiModelProperty(value = "en英文 zh_CN简体中文   zh_TW繁体中文")

private String language;

@ApiModelProperty(value = "用户所在城市")

private String city;

@ApiModelProperty(value = "用户所在省份")

private String province;

@ApiModelProperty(value = "用户所在国家")

private String country;

@ApiModelProperty(value = "用户头像图片的 URL")

private String avatarUrl;

@ApiModelProperty(value = "signature")

@NotBlank(message="不能为空")

private String signature;

@ApiModelProperty(value = "rawData")

@NotBlank(message="不能为空")

private String rawData;

@ApiModelProperty(value = "encryptedData")

@NotBlank(message="不能为空")

private String encryptedData;

@ApiModelProperty(value = "iv")

@NotBlank(message="不能为空")

private String iv;

@ApiModelProperty(value = "1 微信医生端小程序 2微信用户端小程序 3微网站 4手机app 5微信公众号")

@NotBlank(message="不能为空")

private String loginType;

}

第二步:建立Controller进行验证

LoginController.java

package io.renren.modules.wx.controller;

import org.springframework.validation.annotation.Validated;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import io.renren.common.utils.R;

import io.renren.modules.wx.vo.RequetsUserEntity;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import lombok.extern.slf4j.Slf4j;

@Api(tags = "微信小程序授权登录接口")

@RestController

@RequestMapping("/wx/user/{appid}")

@Slf4j

public class LoginController {

@ApiOperation("微信小程序授权登录")

@PostMapping("/login")

public R login(@Validated @RequestBody RequetsUserEntity req) {

// TODO 实现自己的业务

log.info("登录成功");

return R.ok("登录成功");

}

}

第三步:设置全局异常进行拦截

RRExceptionHandler.java

package io.renren.common.exception;

import org.apache.shiro.authz.AuthorizationException;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.dao.DuplicateKeyException;

import org.springframework.http.HttpStatus;

import org.springframework.validation.FieldError;

import org.springframework.web.bind.MethodArgumentNotValidException;

import org.springframework.web.bind.annotation.ExceptionHandler;

import org.springframework.web.bind.annotation.ResponseStatus;

import org.springframework.web.bind.annotation.RestControllerAdvice;

import io.renren.common.utils.R;

@RestControllerAdvice

public class RRExceptionHandler {

private Logger logger = LoggerFactory.getLogger(getClass());

@ExceptionHandler(RRException.class)

public R handleRRException(RRException e){

R r = new R();

r.put("code", e.getCode());

r.put("msg", e.getMessage());

return r;

}

@ExceptionHandler(DuplicateKeyException.class)

public R handleDuplicateKeyException(DuplicateKeyException e){

logger.error(e.getMessage(), e);

return R.error("数据库中已存在该记录");

}

@ExceptionHandler(AuthorizationException.class)

public R handleAuthorizationException(AuthorizationException e){

logger.error(e.getMessage(), e);

return R.error("没有权限,请联系管理员授权");

}

@ExceptionHandler(Exception.class)

public R handleException(Exception e){

logger.error(e.getMessage(), e);

return R.error();

}

@ExceptionHandler(MethodArgumentNotValidException.class)

@ResponseStatus(HttpStatus.BAD_REQUEST)

public R validationError(MethodArgumentNotValidException ex) {

FieldError fieldError = ex.getBindingResult().getFieldError();

logger.error(fieldError.getField()+fieldError.getDefaultMessage());

return R.error(9999, fieldError.getField()+fieldError.getDefaultMessage());

}

}

第四步:然后运行SpringBoot项目发送http请求,获取返回信息

requestbody自定义参数校验_SpringBoot2.0针对请求参数@RequestBody验证统一拦截

第五步:针对R.java类信息如下

R.java

package io.renren.common.utils;

import java.util.HashMap;

import java.util.Map;

public class R extends HashMap {

private static final long serialVersionUID = 1L;

public R() {

put("code", 0);

put("msg", "success");

}

public static R error() {

return error(500, "未知异常,请联系管理员");

}

public static R error(String msg) {

return error(500, msg);

}

public static R error(int code, String msg) {

R r = new R();

r.put("code", code);

r.put("msg", msg);

return r;

}

public static R ok(String msg) {

R r = new R();

r.put("msg", msg);

return r;

}

public static R ok(Map map) {

R r = new R();

r.putAll(map);

return r;

}

public static R ok() {

return new R();

}

@Override

public R put(String key, Object value) {

super.put(key, value);

return this;

}

}

==================================================================

==================================================================