Использование Lombok в неизменяемом классе Request - PullRequest
2 голосов
/ 06 мая 2019

Добро пожаловать,

Я создал простой контроллер отдыха:

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

Я хочу, чтобы класс Request был неизменным.

Можно ли использовать Imutable с 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);
    }

}

Запрос JSON:

{
"id":"g",
"lista": ["xxx","yyy"]
}

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете добавить lombok.config файл в свой проект с включенным свойством addConstructorProperties:

lombok.anyConstructor.addConstructorProperties=true

, тогда Lombok сгенерирует аннотацию @java.beans.ConstructorProperties при создании конструкторов.

Таким образом, выне нужно будет явно указывать конструктор:

@Value
public class Request {
    private String id;
    private ImmutableList<String> list;
}

И Джексон сможет десериализовать ваш объект.


Дополнительная информация:

...