zl程序教程

您现在的位置是:首页 >  其他

当前栏目

项目知识盲区六

项目 知识
2023-09-14 09:13:37 时间


Spring提供的Assert断言工具类

spring Assert

spring Assert详解


Intellij IDEA设置@Author文件头注释

Intellij IDEA设置@Author文件头注释


IntelliJ IDEA 快捷键说明大全(中英对照、带图示详解)

IntelliJ IDEA 快捷键说明大全(中英对照、带图示详解)


@RequiredArgsConstructor

大家平时使用spring依赖注入,都是怎么写的?

@Service
public class OrderService {
    @Autowired
    private UserService userService;

}

是不是很熟悉的感觉?但是呢 如果你用IDEA的话呢,它会提示你

Field injection is not recommended

img

大概就是spring 不推荐建使用这个方式。原因网上很多啦:https://blog.csdn.net/github_38222176/article/details/79506392

下面就是spring推荐的写法:

@Service
public class OrderService {
    private final UserService userService;


    @Autowired
    public OrderService(UserService userService) {
        this.userService = userService;
    }
}

若是注入的类太多的话呢,看起来挺繁琐的。最近偶然在网上发现使用Lombok可以写出简洁的代码:

后发现该方法有几率导致Spring循环引用问题,所以还是不推荐使用

@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderService {
    //这里必须是final,若不使用final,用@NotNull注解也是可以的
    private final UserService userService;

}

这样写实际上编译后和spring推荐的写法是一样的哦,是不是很简洁


mybaits,mybaits-spring官方文档

mybiats-spring

mybaits


spring cloud 中文文档

spring cloud 中文文档

spring cloud 官方英文文档


@RequestBody和@RequestParam和@RequestPart

1.@RequestBody

使用此注解接收参数时,适用于请求体格式为 application/json,只能用对象接收

2.@RequestParam

接收的参数是来自HTTP 请求体 或 请求url 的QueryString中

只能用来接收基本数据类型、String 或者MultipartFile类型,不能同时接收请求体中非String(json)和MultipartFile两种类型同传的form-data请求体.

3.@RequestPart

可以同时上传文件和json(任意)两种格式的form-data请求体.


@RequestPart

@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。

支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的

@RequestParam

@RequestParam支持’application/json’,也同样支持multipart/form-data请求

区别

当请求方法的请求参数类型不是String 或 MultipartFile / Part时,而是复杂的请求域时,@RequestParam 依赖Converter or PropertyEditor进行数据解析, RequestPart参考 ‘Content-Type’ header,依赖HttpMessageConverters 进行数据解析

当请求为multipart/form-data时,@RequestParam只能接收String类型的name-value值,@RequestPart可以接收复杂的请求域(像json、xml);

@RequestParam 依赖Converter or PropertyEditor进行数据解析, @RequestPart参考’Content-Type’ header,依赖HttpMessageConverters进行数据解析

前台请求:

jsonData为Person对象的json字符串

uploadFile为上传的图片

在这里插入图片描述
后台接收:

  1. @RequestPart可以将jsonData的json数据转换为Person对象
@RequestMapping("jsonDataAndUploadFile")
@ResponseBody
public String jsonDataAndUploadFile(@RequestPart("uploadFile") MultiPartFile uploadFile,
                                    @RequestPart("jsonData") Person person) {
    StringBuilder sb = new StringBuilder();
    sb.append(uploadFile.getOriginalFilename()).append(";;;"));
    return person.toString() + ":::" + sb.toString();
}

2.@RequestParam对于jsonData的json数据只能用String字符串来接收

@RequestMapping("jsonDataAndUploadFile")
@ResponseBody
public String jsonDataAndUploadFile(@RequestPart("uploadFile") MultiPartFile uploadFile,
                                    @RequestParam("josnData") String jsonData) {
    StringBuilder sb = new StringBuilder();
    sb.append(uploadFile.getOriginalFilename()).append(";;;"));
    return person.toString() + ":::" + sb.toString();
}

总结

当请求头中指定Content-Type:multipart/form-data时,传递的json参数,@RequestPart注解可以用对象来接收,@RequestParam只能用字符串接收