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,将缩减业务范畴。

原文地址:https://www.cnblogs.com/qqzhulu/p/10162807.html

时间: 2024-10-13 16:20:47

java 请求参数键值对重复问题的相关文章

.NET 获取Get方式URL中的参数键值

在Web开发中,我们常常会涉及到需要获取Get方式URL中的参数键值的情况,这里简单介绍三种方法: 第一种:常用的做法有使用JavaScript获取location.href后用正则表达式匹配获取此URL的所有键值对: 第二种:这里比如有个Key参数键,需要获取它对应的值:这时可以使用.NET里的Request.Form["Key"](针对Post)或Request.QueryString["Key"](针对Get),也可以用Request["Key&qu

Java请求参数类QueryParameter

import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; /** * 请求参数类 * */ public class QueryParameter { public static final String ASC = "asc"; public static final String DESC = "desc"; protected int

Ajax的post表单,不在url后接一大串参数键值对的方法

$('#loginForm').on('submit',function (ev) { //阻止表单参数附在url后面 ev.stopPropagation(); ev.preventDefault(); 再在下面写上Ajax方法 即可阻止url后接一大串键值对参数 stopPropagation()方法 该方法将停止事件的传播,阻止它被分派到其他 Document 节点.在事件传播的任何阶段都可以调用它.注意,虽然该方法不能阻止同一个 Document 节点上的其他事件句柄被调用,但是它可以阻

java函数参数默认值

java通过函数的重载来实现函数参数默认值 public class ParameterDefault { /** * @param args */ public String getName(String givenName,String familyName){ return givenName+"."+familyName; } public String getName(String givenName){ return getName(givenName,"Xie&

L3.五.位置参数默认参数键值对参数

#参数的几种类型 #位置参数.一个标识符 def get_max(a,b,c): max_num = a if b>max_num: max_num=b if c>max_num: max_num=c return max_num get_max(1,5,3) #默认参数,带默认值得参数 def myrange(start,end,step) i = start while i < end: print(i) i+=step myrange(1,10,3) # 上例中stdp=1就是一个

Java的HashMap键值对存储结构解析

容器总体结构 Map存储键值对的数据结构是“数组+链表”的结构,结合了数组查询数据快和链表增删数据快的优点:用Entry[]存储键值对,Entry为类类型,类里面有四个属性:hash.K.V.next,分别存储哈希值.键对象.值对象.下一个Entry对象引用. Entry底层源码 Entry对象存储结构图 Entry数组存储结构图 HashMap存储数据过程示意图 我们的目的是将”key-value两个对象”成对存放到HashMap的Entry[]数组中.参见以下步骤: (1) 获得key对象的

java初步—参数的值传递

校招季,本人匆匆忙忙地参加各种宣讲会,几次笔试下来都遇到同一个题目,而且全都错在同一想法上,方知自己的基础实在不太牢固,因此特别写在博客上提醒自己要脚踏实地地学习!不多说了,题目如下: 1 public class Test { 2 public static void main(String[] args) { 3 StringBuffer s1 = new StringBuffer("a"); 4 StringBuffer s2 = new StringBuffer("b

Java中参数的值传递

因为遇到了java中值传递问题,一直懵懂,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握. 一些人说Java只有值传递,但也有人说既有值传递,也有引用传递,对于两种观点个人觉得应该是站的角度不同而得出两个不同的说法. 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递.示例如下 public class TempTest { private void test1(int a){ //做点事情 } public static void main(String[] args)

通过FormData对象可以组装一组用 [XMLHttpRequest]发送请求的键/值对,它可以更灵活方便的发送表单数据。

工作记录用 1 大概页面,点击选择按钮,选择文件,填写备注并可以上传前预览,然后点击上传按钮开始上传 2 html+js代码 <h2>Test</h2> <div id="fileList"></div> <span id="file_ct" style="display:none"><input id="file_input" accept="Ima