Controller获取URL中的参数

背景

在使用REST接口的时候,需要传递多个参数,遵循REST的请求方式,查询数据用GET的请求方式。

如果仅仅是为了读取资源,当所需参数较多时,URL传递参数不太美观,放在body中进行传递更好。

而需要使用 Body 发送一大批数据时,改用 POST 请求却与 RESTFul 的 POST 语义不相符。这时候或许可以 GET + BODY, 但是不能对该请求以 URI 作为 Key 进行缓存了。

查询得知,Apache Http Client 和 OkHttpClient 都不支持 GET 请求发送 Body 数据,而 AsyncHttpClient 是可以的。谁说 HTTP GET 就不能通过 Body 来发送数据呢?

我的项目不支持GET请求发送body数据,所以只能在URL中以?xxx=yyy&aaa=bbb的方式传递参数,让我们来看看几种获取参数的方法。

正文

直接把表单的参数写在Controller相应的方法的形参中

适用于get方式提交,不适用于post方式提交。若"Content-Type"=“application/x-www-form-urlencoded”,可用post提交
URL形式

http://localhost:9001/mcs/classOperation/DD/DD_DD?formId=DD_DD_CONFIG_DDMODEL_SERVICE_LIST&classId=DC_ApplicationService&relClassId=DCRCOM_AppSysAppSrv&operationId=GetData&userId=mawei&operationInstanceId=DD_DD_CONFIG_DDMODEL_SERVICE_LIST_GetData&_=1567650209332
@GetMapping(value = "/classOperation/{geneId}/{sceneId}", produces="application/json;charset=utf-8")
	public ResponseEntity<?> classOperation (@PathVariable String geneId, @PathVariable String sceneId,
											String formId, String classId, String relClassId, String operationId, String operationInstanceId,
											String userId, HttpSession session){

		return new ResponseEntity<List>(new ArrayList(), HttpStatus.OK);
	}

通过HttpServletRequest接收,post方式和get方式都可以。

public String test(HttpServletRequest request) {
        String geneId=request.getParameter("geneId");
        String sceneId=request.getParameter("sceneId");
        System.out.println("username is:"+geneId);
        System.out.println("password is:"+sceneId);
        return null;
    }

通过一个bean来接收,post方式和get方式都可以。(不推荐)

这是我编码初期常用的方式,但是很不通用,需要前台参数与后台bean字段名相同,且不能接收bean中没有的字段。可以用Class clazz = JSON.parseObject(param, Class.class)

 public String test(OcSolution solution) {
     System.out.println("geneId is:"+solution.getGeneId());
     System.out.println("sceneId is:"+solution.getSceneId());
     return null;
 }

用request.getQueryString() 获取spring MVC get请求的参数,只适用get请求

public String test(HttpServletRequest request) { 
  System.out.println("QueryStringis:"+request.getQueryString()); 
    return null; 
}

用这种方式获取的QueryString是?后面的所有字符串
formId=DD_DD_CONFIG_DDMODEL_SERVICE_LIST&classId=DC_ApplicationService&relClassId=DCRCOM_AppSysAppSrv&operationId=GetData&userId=mawei&operationInstanceId=DD_DD_CONFIG_DDMODEL_SERVICE_LIST_GetData&_=1567650209332
可以根据需要进行处理,比如替换成json格式以便解析

提问

如果使用REST接口,当参数比较多的情况,应该怎么做?
或者说,有些 参数希望放入REST请求的路径中,有些则不希望,应该怎么做?
希望各路大神提出宝贵意见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值