Я хочу использовать свой собственный десериализатор в контроллере отдыха с весенней загрузкой.Чтобы выполнить свою работу, ему нужна некоторая настраиваемая конфигурация, которая предоставляется ему в качестве аргумента конструктора.Как я могу передать такой аргумент в контроллер покоя?
Вот пример.
DTO (с некоторыми аннотациями lombok):
@Getter
@Setter
@RequiredArgsConstructor
@AllArgsConstructor
@JsonDeserialize(using = Deserializer.class)
public class DTO {
private int a;
private int b;
}
Десериализатор:
public class Deserializer extends JsonDeserializer<DTO> {
//custom config
int val;
public Deserializer(int value) {
val = value;
}
@Override
public DTO deserialize(JsonParser p, DeserializationContext ctxt) throws IOException{
JsonNode node = p.readValueAsTree();
int a = node.has("a") ? node.get("a").asInt() : -1;
int b = node.has("b") ? node.get("b").asInt() : -1;
//custom config usage
return new DTO(a + val, b + val);
}
}
Контроллер:
@RestController
@RequestMapping
public class Controller {
//how to pass `val` into deserializer of DTO object?
@PostMapping("/foo")
DTO foo(@RequestBody DTO dto) {
return dto;
}
}
Любая помощь будет оценена.