简体   繁体   English

无法按预期从URI中提取Spring MVC @RequestParam值

[英]Spring MVC @RequestParam values not being extracted from URI as expected

I am wondering how spring split each parameters of a http request. 我想知道spring如何拆分http请求的每个参数。 By example i have this method definition : 通过示例,我有此方法定义:

@RequestMapping(value = "/search.do", method = RequestMethod.GET)
public String searchGet(ModelMap model,
    @RequestParam(value = "memberId", required = false) Integer memberId,
    @RequestParam(value = "member", required = false) String member) {...}

and i use this url : 我用这个网址:

/search.do?member=T&O=

i get member = T and not member =T&O= 我得到成员= T而不是成员= T&O =

The request params are limited to only memberId and member. 请求参数仅限于memberId和member。 Can i configure spring for solving this problem ? 我可以配置弹簧来解决这个问题吗?

Some characters in URLs have a special meaning. URL中的某些字符具有特殊含义。 If they are supposed to be part of a value they need to be escaped. 如果应该将它们作为值的一部分,则需要对其进行转义。

If your value is T&O= then it needs to be changed to T%26O%3D 如果您的值为T&O =,则需要将其更改为T%26O%3D

& is used to seperate request parameters. &用于分隔请求参数。
URL contain request param name and value in following format URL包含以下格式的请求参数名称和值

http://host_port_and_url?name1=value1&name2=value2&so_on

In your case 就你而言

/search.do?member=T&O=  

Name -> Value 名称->值
member -> T 成员-> T
O -> (No value- Blank) O->(无值-空白)
So you are getting correct values 所以你得到正确的值

Looking at your controller code, your URL should have been 查看您的控制器代码,您的URL应该已经

/search.do?memberId=T&member=

Then request parameter names will get mapped correctly. 然后,请求参数名称将被正确映射。

If you wish to use same URL as mentioned in your question, change controller code to : 如果您希望使用与问题中提到的网址相同的网址,请将控制器代码更改为:

public String searchGet(ModelMap model,
@RequestParam(value = "O", required = false) Integer memberId,
@RequestParam(value = "member", required = false) String member) {...}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM