1. 程式人生 > >java 請求引數鍵值對重複問題

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,將縮減業務範疇。