南阳企业网站制作,济南高新区 网站建设,做网站怎么让字居右,做网站的属于什么工作类型在Spring MVC中#xff0c;RestController注解的控制器类可以处理多种HTTP请求方法#xff0c;包括GET和POST。这些请求方法通过特定的注解来映射#xff0c;比如GetMapping用于GET请求#xff0c;PostMapping用于POST请求。这些注解是RequestMapping的特定化版本#xff…在Spring MVC中RestController注解的控制器类可以处理多种HTTP请求方法包括GET和POST。这些请求方法通过特定的注解来映射比如GetMapping用于GET请求PostMapping用于POST请求。这些注解是RequestMapping的特定化版本提供了更清晰的语义。
GET请求
GET请求通常用于请求数据。在RestController中你可以使用GetMapping或RequestMapping(method RequestMethod.GET)来映射GET请求。
RestController
public class MyController { GetMapping(/greeting) public String greeting() { return Hello, World!; } // 或者使用RequestMapping RequestMapping(value /hello, method RequestMethod.GET) public String hello() { return Hi there!; }
}
在上面的例子中/greeting和/hello路径分别映射到greeting和hello方法这两个方法都会处理GET请求并返回简单的字符串响应。
GET请求通常通过URL的查询字符串query string来传递参数。Spring MVC提供了几种注解来帮助你方便地获取这些参数。
在RestController中处理GET请求时RequestParam是获取查询字符串参数的主要方式
PathVariable则用于从URL的路径中获取参数。
RequestParam
RequestParam注解用于将请求参数绑定到你的控制器方法的参数上。默认情况下请求参数名和参数变量名需要相同但你可以通过value或name属性来明确指定请求参数名。
RestController
public class MyController { GetMapping(/greet) public String greet(RequestParam(value name, required false, defaultValue World) String name) { return Hello, name !; }
}
在这个例子中greet方法通过RequestParam注解接收一个名为name的请求参数。如果请求中没有提供name参数那么name变量的值将是默认值World。required属性设置为false表示这个参数不是必须的。
PathVariable
PathVariable 是 Spring MVC 中用于将 URL 中的变量值绑定到控制器处理器方法参数上的注解。这个注解是 Spring 3.0 引入的它允许我们从 URL 中提取变量作为方法的参数。
虽然 PathVariable 不是直接用于GET请求参数的但它经常与GET请求一起使用特别是当你想从URL的路径中获取参数时。
RestController
public class MyController { GetMapping(/user/{id}) public String getUserById(PathVariable(id) Long userId) { // 假设这里有一个根据userId获取用户信息的逻辑 return User ID: userId; }
}
在这个例子中{id}是一个路径变量它通过PathVariable注解绑定到userId参数上。当请求/user/123时userId的值将是123。
ModelAttribute
ModelAttribute主要用于将请求参数包括查询字符串参数、表单数据、路径变量等绑定到Java对象上并将这些对象添加到模型中以便在视图渲染时使用。
RestController
public class MyController {GetMapping(/search)public String search(ModelAttribute MySearchParams searchParams) {return Searching for: searchParams.getQuery();}// 假设MySearchParams类如下static class MySearchParams {private String query;// 省略getter和setter方法}
}
默认值和必填性
对于RequestParam你可以通过required属性指定参数是否是必须的以及通过defaultValue属性为缺失的参数提供一个默认值。对于PathVariable没有直接的required或defaultValue属性但你可以通过控制器方法的逻辑来处理缺失的路径变量尽管这通常意味着请求的路径是错误的。
POST请求
POST请求通常用于提交数据给服务器。在RestController中你可以使用PostMapping或RequestMapping(method RequestMethod.POST)来映射POST请求。
RestController
public class MyController { // 使用PostMapping PostMapping(/submit) public ResponseEntityString submitData(RequestBody String data) { // 处理数据... return ResponseEntity.ok(Data received: data); } // 或者使用RequestMapping RequestMapping(value /postData, method RequestMethod.POST) public ResponseEntityString postData(RequestBody String data) { // 处理数据... return ResponseEntity.ok(Data posted: data); }
}
在上面的例子中/submit和/postData路径分别映射到submitData和postData方法这两个方法都会处理POST请求。
注意RequestBody注解用于将请求体中的数据绑定到方法的参数上。
在实际应用中你可能会使用RequestBody来接收一个Java对象Spring会自动将请求体中的数据映射到这个对象的属性上。
Form请求
RestController
public class MyRestController { PostMapping(/submitForm) public String submitForm(RequestParam(username) String username, RequestParam(password) String password) { return Received username: username , password: password; }
}
JSON请求
RestController
public class MyJsonRestController { PostMapping(/submitJson) public String submitJson(RequestBody MyFormObject formObject) { return Received user: formObject.getUsername() , password: formObject.getPassword(); } // 假设你有一个MyFormObject类来接收JSON数据 static class MyFormObject { private String username; private String password;// 省略getter和setter方法}
} 上传图片
PostMapping(value /uploadFile, name 上传文件)
public String uploadImage(MultipartFile file) {//获取文件原名String fileName file.getOriginalFilename();//设置上传路径//判断上传路径是否存在不存在则创建目录File fileDir new File(realPath);if (!fileDir.exists()) {fileDir.mkdirs();}String strYmd LocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyy-MM-dd));File fileYmdDir new File(realPath / strYmd);if (!fileYmdDir.exists()) {fileYmdDir.mkdirs();}fileName getFileName(fileName);String outputPath ;//上传文件try {outputPath realPath /strYmd / fileName;InputStream input file.getInputStream();FileOutputStream fos new FileOutputStream(outputPath);IOUtils.copy(input, fos);} catch (Exception e) {System.out.println(e.getMessage());return null;}System.out.println(uploadFile:outputPath);return outputPath;
}
RequestHeader
RequestHeader 是获取请求头中的数据通过指定参数 value 的值来获取请求头中指定的参数值。其他参数用法和 RequestParam 完全一样。
ResponseBody
GetMapping(/RequestHeader)
public Map test(RequestHeader(host) String host){Map map new HashMap();map.put(header, host);return map;
}ResponseBody
GetMapping(/RequestHeader)
public Map test(RequestHeader MapString, String headers){Map map new HashMap();map.put(headers, headers);return map;
}