java中http请求带body参数_[Java] 基于 SpringBoot 增加 @BodyParam 注解接收Http请求Body中的Json参数...

importcom.fasterxml.jackson.databind.ObjectMapper;importgraspyun.weshop.manage.filter.BufferedServletRequestWrapper;importgraspyun.weshop.manage.support.annotation.BodyParam;importgraspyun.weshop.manage.support.exceptions.SysException;importorg.springframework.core.MethodParameter;importorg.springframework.stereotype.Component;importorg.springframework.web.bind.MissingServletRequestParameterException;importorg.springframework.web.bind.support.WebDataBinderFactory;importorg.springframework.web.context.request.NativeWebRequest;importorg.springframework.web.method.support.HandlerMethodArgumentResolver;importorg.springframework.web.method.support.ModelAndViewContainer;importjava.lang.reflect.Array;importjava.util.List;importjava.util.Map;/*** 处理 @BodyParam 注解

*@authoryangyxd

* @date 2020.08.18 16:03*/@Componentpublic class BodyParamResolver implementsHandlerMethodArgumentResolver {

@Overridepublic booleansupportsParameter(MethodParameter methodParameter) {return methodParameter.hasParameterAnnotation(BodyParam.class);

}

@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throwsException {

BufferedServletRequestWrapper request=(BufferedServletRequestWrapper) nativeWebRequest.getNativeRequest();

Map json=request.getContentBody();

BodyParam p= methodParameter.getParameterAnnotation(BodyParam.class);

Object v= json == null ? null: json.get(p.value().toLowerCase());if (v == null) {if(p.required()) {if(p.message().isEmpty())throw newMissingServletRequestParameterException(p.value(), methodParameter.getParameterType().getTypeName());throw newSysException(p.message());

}return null;

}final Class> pType =methodParameter.getParameterType();final Class> vType =v.getClass();if (pType ==vType)returnv;if (pType == String.class) {if (v instanceof Map || v instanceof List || v instanceofArray) {

ObjectMapper mapper= newObjectMapper();returnmapper.writeValueAsString(v);

}if (v instanceofNumber) {returnv.toString();

}

}else if (v instanceofNumber) {if (pType == Long.class)return((Number) v).longValue();if (pType == Short.class)return((Number) v).shortValue();if (pType == Byte.class)return((Number) v).byteValue();if (pType == Double.class)return((Number) v).doubleValue();if (pType == Float.class)return((Number) v).floatValue();

}returnv;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值