java 请求参数键值对重复问题

Posted qqzhulu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 请求参数键值对重复问题相关的知识,希望对你有一定的参考价值。

java在通过url访问接口的过程中,url需传入参数,可将请求参数作为键、请求参数获取的值作为值。在传参过程中,若键出现重复,则会出现覆盖现象,值可出现重复现象。

如以下案例:

案例1:

controller层:

@RestController
@RequestMapping("api")
public class MemberController {

@RequestMapping(value = "v2/member/member/resources/update") // 修改我的资源
public Object resourcesUpdate(
@RequestParam String rName,
@RequestParam String rDesc,
@RequestParam String id,
@RequestParam(value = "Images", required = false) MultipartFile[] Images,
HttpServletRequest request) {
Member member = memberService.checkIdAndToken(request);
if (member == null) {
return new APIResult(1000, "登录失效");
}
MemberResources memberResources = memberResourcesService.getByIdAndMemberId(id, member.getId());
memberResources.setRname(rName);
memberResources.setrDesc(rDesc);
memberResources.setCreateTime(new Date());
if (Images != null && Images.length > 0) {
String images = "[";
if (Images != null && Images.length > 0) {
for (int i = 0; i < Images.length; i++) {
String imageUrl = imageUploadService.uploadFile(Images[i]);
if (i == 0) {
images += imageUrl;
continue;
} else {
images += "," + imageUrl;
}
}
}
images += "]";
// 保存图片集合
memberResources.setImgUrl(images);
}
MemberResources memberResources1 = memberResourcesService.save(memberResources);

return APIResult.createSuccess(memberResources1);
}

}

service层

public Member checkIdAndToken(HttpServletRequest request) {
String id = HttpRequestUtils.getHeaderByName(request, "id");
String token = HttpRequestUtils.getHeaderByName(request, "token");
if (id == null) {
id = request.getParameter("id");
}
if (token == null) {
token = request.getParameter("token");
}
return memberRepository.findByIdAndToken(id, token);
}

若要对该接口进行访问,访问路径为:127.0.0.1:8080/api/v2/member/member/resources/update? id=**&token=**&rName=**&rDesc&id=**&images=**

id出现重复,请求结果返回"登录失效",若要解决此问题,可对controller层的id进行重命名,如rid。

案例2:

controller层:

@RestController
@RequestMapping("api")
public class MemberController {

@RequestMapping(value = "v2/member/member/resources/list") // 查询我的资源
public Object resourcesList(@RequestParam String memberId,
@RequestParam(required = false, defaultValue = PageConstants.DEFAULT_PAGE_NUMBER) Integer page,
@RequestParam(required = false, defaultValue = PageConstants.DEFAULT_PAGE_SIZE) Integer size,
HttpServletRequest request) {
Member member = memberService.checkIdAndToken(request);
if (member == null) {
return new APIResult(1000, "登录失效");
}
if (memberId != null && !memberId.equals("")) {
} else {
memberId = member.getId();
}
List<MemberResources> memberResourcesList = memberResourcesService
.getListByMemberIdOrderByCreateTimeDesc(memberId, page, size);
List<MemberResourcesVO> memberResourcesVOList = new ArrayList<>();
for (MemberResources memberResources : memberResourcesList) {
MemberResourcesVO memberResourcesVO = new MemberResourcesVO();
memberResourcesVO.setId(memberResources.getId());
memberResourcesVO.setCreateTime(memberResources.getCreateTime());
memberResourcesVO.setMemberId(memberResources.getMemberId());
memberResourcesVO.setrDesc(memberResources.getrDesc());
memberResourcesVO.setrName(memberResources.getRname());
if (memberResources.getImgUrl() != null && !memberResources.getImgUrl().equals("")) {
String imgUrl = memberResources.getImgUrl();
imgUrl = imgUrl.substring(1, imgUrl.length() - 1);
if (imgUrl.length() > 0) {
String[] img = imgUrl.split(",");
memberResourcesVO.setImgUrl(img);
} else {
memberResourcesVO.setImgUrl(null);
}
}
memberResourcesVOList.add(memberResourcesVO);
}
return APIResult.createSuccess(memberResourcesVOList);
}

}

service层

public Member checkIdAndToken(HttpServletRequest request) {
String id = HttpRequestUtils.getHeaderByName(request, "id");
String token = HttpRequestUtils.getHeaderByName(request, "token");
if (id == null) {
id = request.getParameter("id");
}
if (token == null) {
token = request.getParameter("token");
}
return memberRepository.findByIdAndToken(id, token);
}

这里的请求参数memberId可以为其他用户的id,也可以为登录用户的ie,还可以为空,若只考虑memberId=id,将缩减业务范畴。

 
































































































以上是关于java 请求参数键值对重复问题的主要内容,如果未能解决你的问题,请参考以下文章

在使用get请求时,也可以向请求中传递url参数对吗?

Android实战——Retrofit2的使用和封装

python之网络请求

从零开始设计SOA框架:请求参数的加密方式

python3+requests:get/post请求

Retrofit之请求参数