SpringMVC常见接收请求参数的方式

  • Post author:
  • Post category:其他


接收文件上传

使用@Requestpart+MultipartFile

@PostMapping(value = "/file1")
public String file1(@RequestPart(name = "file1") MultipartFile multipartFile) {
    String content = String.format("name = %s,originName = %s,size = %d",
            multipartFile.getName(), multipartFile.getOriginalFilename(), multipartFile.getSize());
    log.info(content);
    return content;

或者使用@Requestparam+MultipartFile或者只使用MultipartFile

@PostMapping(value = "/file2")
public String file2(MultipartFile file1) {
    String content = String.format("name = %s,originName = %s,size = %d",
                file1.getName(), file1.getOriginalFilename(), file1.getSize());
    log.info(content);
    return content;}@PostMapping(value = "/file3")
    
    public String file3(@RequestParam(name = "file1") MultipartFile multipartFile) {
    String content = String.format("name = %s,originName = %s,size = %d",
            multipartFile.getName(), multipartFile.getOriginalFilename(), multipartFile.getSize());
    log.info(content);
    return content;
}

接收URL参数

URL参数,或者叫请求路径参数是基于URL模板获取到的参数,例如/user/{userId}是一个URL模板(URL模板中的参数占位符是{}),实际请求的URL为/user/1,那么通过匹配实际请求的URL和URL模板就能提取到userId为1。

使用@PathVariable

@GetMapping(value = "/user/{name}/{age}")
public String findUser1(@PathVariable(value = "age") Integer age, @PathVariable(value = "name") String name) {
    String content = String.format("name = %s,age = %d", name, age);
    log.info(content);
    return content;
}


表单参数

接收单个参数使用@RequestParam

@PostMapping(value = "/post")public String post(@RequestParam(name = "name") String name,
                   @RequestParam(name = "age") Integer age) {
    String content = String.format("name = %s,age = %d", name, age);
    log.info(content);
    return content;
}

也可以用一个实体类对象接收

@PostMapping(value = "/user")
public User saveUser(User user) {
    log.info(user.toString());
    return user;
}


日期类型参数

统一以字符串接收,再自行转换。

先用@RequestBody加一个实体类把日期统统转换成字符串类型,再自行接收转换成日期类型。

@PostMapping(value = "/date1")
public String date1(@RequestBody UserDto userDto) {

    UserEntity userEntity = new UserEntity();
    userEntity.setUserId(userDto.getUserId());
    userEntity.setBirthdayTime(LocalDateTime.parse(userDto.getBirthdayTime(), FORMATTER));
    userEntity.setGraduationTime(LocalDateTime.parse(userDto.getGraduationTime(), FORMATTER));
    log.info(userEntity.toString());
    return "success";
}
    
@Datapublic class UserDto {
 
    private String userId;
    private String birthdayTime;
    private String graduationTime;}@Datapublic class UserEntity {
 
    private String userId;
    private LocalDateTime birthdayTime;
    private LocalDateTime graduationTime;
}


请求头

用@RequestHeader,在注解中用name指定请求头中的key

@PostMapping(value = "/header")
public String header(@RequestHeader(name = "Content-Type") String contentType) {
   return contentType;
}


Cookie

Cookie的值主要通过@CookieValue注解的参数获取

@PostMapping(value = "/cookie")
public String cookie(@CookieValue(name = "JSESSIONID") String sessionId) {
    return sessionId;}

Model类型参数

Model类型参数的处理器是ModelMethodProcessor,实际上处理此参数是直接返回ModelAndViewContainer实例中的Model(ModelMap类型),因为要桥接不同的接口和类的功能,因此回调的实例是BindingAwareModelMap类型,此类型继承自ModelMap同时实现了Model接口。举个例子:

@GetMapping(value = "/model")
public String model(Model model, ModelMap modelMap) {
    log.info("{}", model == modelMap);
    return "success";
}



版权声明:本文为m0_61329148原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。