在不可变请求类中使用 Lombok

pio*_*sss 5 java rest post lombok spring-boot

欢迎,

我创建了简单的休息控制器:

 @RestController
 public class MyController {
    @PostMapping(value = "/cities", consumes = "application/json", produces = "application/json")
    public String getCities(@RequestBody Request request) {
        return request.getId();
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望 Request 类是不可变的。

以这种方式将 Immutable 与 Lombok 一起使用可以吗?

import com.google.common.collect.ImmutableList;
import java.beans.ConstructorProperties;
import java.util.List;
import jdk.nashorn.internal.ir.annotations.Immutable;
import lombok.Getter;
import lombok.Value;

@Immutable
@Value
public final class Request {

    private final String id;
    private final ImmutableList<String> lista;

    @ConstructorProperties({"id", "lista"})
    public Request(String id, List<String> lista) {
        this.id = id;
        this.lista = ImmutableList.copyOf(lista);
    }

}
Run Code Online (Sandbox Code Playgroud)

请求 JSON:

{
"id":"g",
"lista": ["xxx","yyy"]
}
Run Code Online (Sandbox Code Playgroud)

Cep*_*pr0 7

您可以lombok.config使用启用的属性将文件添加到项目中addConstructorProperties

lombok.anyConstructor.addConstructorProperties=true
Run Code Online (Sandbox Code Playgroud)

那么Lombok@java.beans.ConstructorProperties在生成构造函数的时候会生成一个注解。

因此,您不需要显式指定构造函数:

lombok.anyConstructor.addConstructorProperties=true
Run Code Online (Sandbox Code Playgroud)

杰克逊将能够反序列化你的对象。


更多信息: