簡體   English   中英

@RequestParam省略,但映射仍正確完成

[英]@RequestParam omitted but mapping is still done correctly

我只是發現,即使我在organization參數上省略了@RequestParam批注,Spring仍然能夠綁定它。

@RequestMapping(value="", method = RequestMethod.POST)
@ResponseBody
public String save(String organization){
    logger.info(organization); // it works
}

任何人都可以指向闡明此行為的文檔嗎? 我一直都認為@RequestParam是綁定工作所必需的。

謝謝

看看https://reversecoding.net/spring-mvc-requestparam-binding-request-parameters/有一個解釋:

沒有@RequestParam的示例

根據您的應用程序中配置的HandlerMethodArgumentResolver列表,也可以省略@RequestParam。 如果您看一下RequestMappingHandlerAdapter的getDefaultArgumentResolvers()方法的代碼,則最后有以下代碼:

//捕獲所有resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(),true));

resolvers.add(new ServletModelAttributeMethodProcessor(true));

//捕獲所有resolvers.add(new RequestParamMethodArgumentResolver(getBeanFactory(),true));

resolvers.add(new ServletModelAttributeMethodProcessor(true));

基本上,它是將useDefaultResolution設置為true的RequestParamMethodArgumentResolver添加到解析器的。 通過查看文檔,我們可以看到,這意味着方法參數(即BeanUtils.isSimpleProperty(java.lang.Class)中定義的簡單類型)即使未加注釋也被視為請求參數。 請求參數名稱是從方法參數名稱派生的。

您的解析器會自動執行此操作。 當您將HandlerMethodArgumentResolver bean傳遞給您的解析器時, BeanUtil 檢查該參數是原始值還是簡單的String 如果是這樣,它將進行綁定本身。

@RequestMapping(value = "/rest")
@ResponseBody
public String save(String username, String password) {
    return String.format("username=%s  password=%s", username, password);
}

點擊服務http:// localhost:8080 / rest?username = mypwd&password = uname

您將能夠看到下面給出的結果。

輸出: username = pwd password = uname

在這里,我為@RequestParam提供了一些示例,希望它們可以為您提供幫助: @RequestMapping(value = "/selection/findByField", method = RequestMethod.POST) public @ResponseBody List<selectionsDO> add(@RequestParam(value = "field", required = true) String field,@RequestParam(value = "value", required = true) String value) { return mongoService.findByField(field,value); } @RequestMapping(value = "/selection/findByField", method = RequestMethod.POST) public @ResponseBody List<selectionsDO> add(@RequestParam(value = "field", required = true) String field,@RequestParam(value = "value", required = true) String value) { return mongoService.findByField(field,value); }

單詞“ required = true”表示該字段必須根據請求提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM