💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## **@RequestParam和@RequestBody的使用场景** * [ ] 在GET请求中,不能使用@RequestBody(因为get请求没有HttpEntity)。 * [ ] @RequestParam接收的参数是**来自requestHeader**中,即**请求头**。 * [ ] @RequestBody接收的参数是**来自requestBody**中,即**请求体** * [ ] POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-Type,SpringMVC通过使用HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。 ### **1. @RequestParam** ① 支持POST和GET请求。 ② 只支持Content-Type:为application/x-www-form-urlencoded编码的内容。**Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型**) ### **2. @RequestBody** ① 不支持GET请求。 ② 必须要在请求头中申明content-Type(如application/json)springMvc通过HandlerAdapter配置的HttpMessageConverters解析httpEntity的数据,**并绑定到相应的bean上**。 ### **3. 使用上的区别** **1. POST请求时** @RequestBody --> JSON字符串部分 @RequestParam --> 请求参数部分 application/json格局图 **2. 从content-type方面总结:** ① form-data、x-www-form-urlencoded:不可以用@RequestBody;可以用@RequestParam。见postman的格局,这两种方式的时候没有json字符串部分。 **② application/json:json字符串部分可以用@RequestBody;url中的?后面参数可以用@RequestParam。见postman的格局** ![](https://img.kancloud.cn/03/3b/033bff2ec1ecb19d9ea6cbd88e4587c5_1118x765.png) **@RequestParam Map formData用于获得键值对参数(URL参数)** **HttpServletRequest request用于接收file和content(http body参数)** ~~~ /** * 导入 */ @RequestMapping(value = "/leadingIn", method = RequestMethod.POST) public ResponseObj<Boolean> leadingIn(@RequestParam Map formData, HttpServletRequest request, Map<String, InputStream> files) { //测试 try { MultipartHttpServletRequest mulRequest = (MultipartHttpServletRequest) request; Set<Map.Entry<String, MultipartFile>> set = mulRequest.getFileMap().entrySet(); Map<String, InputStream> listFile = new LinkedHashMap<>(); System.out.println("个数" + set.size()); for (Map.Entry<String, MultipartFile> each : set) { String fileName = each.getKey(); MultipartFile file = each.getValue(); //这里需要上传FTP try { listFile.put(fileName, file.getInputStream()); } catch (Exception ex) { return new ResponseObj<>(false, null); } } String formjson = mulRequest.getParameter("content"); ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // boolean result = iInstallWorkOrder.upLoadFile(listFile); boolean result = true; return new ResponseObj<>(result, null); } catch (Exception ex) { System.out.println(ex.toString()); return new ResponseObj<>(false, null); } } ~~~