解决requestWrapper.getBody()取不到值的问题
@ApiIgnore
@InvokeLog(name = "editInvoiceTitle", description = "修改发票抬头簿")
@ResponseBody
@RequestMapping(value = "/editInvoiceTitle", method = RequestMethod.POST)
public String editInvoiceTitlesById (HttpServletRequest request,@RequestBody InvoiceTitleReqDto invoiceTitle){
//校验memberNo与token
String valMem = messageService.validateMember(request);
if (StringUtil.isNotEmpty(valMem)) {
return CommonUtil.getReturn(Constants.MSG_UNAUTHORIZED, SysErrorConsts.PERMISSION_ERROR_CODE, valMem, null);
}
在validateMember 校验时取不到json对象 原因:HttpServletRequest request 需要引入 javax.servlet.http.HttpServletRequest包
@Override
public String validateMember(HttpServletRequest httpRequest) {
String result = "";
try {
String method = "GET";
OtpRequestWrapper requestWrapper = null;
method = httpRequest.getMethod();
requestWrapper = new OtpRequestWrapper(httpRequest);
// 会员相关过滤
String memberNo = "";
String token = "";
String code = "";
boolean memberFlag = true;
if ("POST".equals(method)) {
JSONObject jsonObject = JSONObject.parseObject(requestWrapper.getBody());
for (String key : jsonObject.keySet()) {
if ("memberNo".equals(key)) {
if (jsonObject.get(key) != null) {
memberNo = jsonObject.get(key).toString();
}
break;
}
}
if (StringUtil.isNotEmpty(memberNo)) {
Cookie[] cookies = requestWrapper.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
if ("token".equals(name)) {
token = value;
break;
}
}
}
}
} else {
memberNo = httpRequest.getParameter("memberNo");
if (StringUtil.isNotEmpty(memberNo)) {
Cookie[] cookies = requestWrapper.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
if ("token".equals(name)) {
token = value;
break;
}
}
}
}
if (StringUtil.isNotEmpty(memberNo)) {
if (StringUtil.isNotEmpty(token)) {
// 不登陆可以访问的url自动放行
String memberNoAuthorizationResult = memberNoAuthorization(memberNo, token);
if (StringUtil.isEmpty(memberNoAuthorizationResult)) {
log.error("会员鉴权失败");
memberFlag = false;
} else {
JsonObject memberNoAuthorizationJson = new JsonParser().parse(memberNoAuthorizationResult)
.getAsJsonObject();
if (CommonConstants.RESPONSE_SUCCESS
.equals(memberNoAuthorizationJson.get("status").getAsString())) {
memberFlag = true;
} else {
code = memberNoAuthorizationJson.get("code").getAsString();
memberFlag = false;
}
}
} else {
memberFlag = false;
code = "MC90018";
}
} else {
memberFlag = true;
}
if (!memberFlag) {
result = code;
}
} catch (Exception e) {
log.error("会员鉴权失败", e);
result = String.valueOf(SysErrorConsts.REQUEST_ERROR_CODE);
}
return result;
}
debugger调试如图:
ServletRequest、 HttpServletRequest、Request的联系与区别
-
HttpServletRequest HttpServletResponse分别是ServletRequest和ServletResponse的之类
-
HttpServletRequest和ServletRequest都是接口
-
HttpServletRequest继承自ServletRequest, HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。如getHeader (String name), getMethod () ,getSession () 等等。
他们对应的实现类:
javax.servlet.ServletRequestWrapper (implements javax.servlet.ServletRequest)
javax.servlet.http.HttpServletRequestWrapper (implements javax.servlet.http.HttpServletRequest)
postman中需要用到的添加token的步骤
注意点:对应的路径下设置对应的token