gpt4 book ai didi

java - 如何在 Spring Boot 应用程序中将参数传递给自定义 JSON 反序列化器

转载 作者:行者123 更新时间:2023-11-30 05:35:55 25 4
gpt4 key购买 nike

我想在 Spring Boot Rest Controller 中使用我自己的反序列化器。为了完成它的工作,它需要一些自定义配置——这些配置作为构造函数参数提供给它。如何在休息 Controller 中传递这样的参数?

这是示例。

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);
}
}

Controller :


@RestController
@RequestMapping
public class Controller {
//how to pass `val` into deserializer of DTO object?
@PostMapping("/foo")
DTO foo(@RequestBody DTO dto) {
return dto;
}
}

如有任何帮助,我们将不胜感激。

最佳答案

您可以创建一个自定义 ObjectMapper 并向其中添加自定义序列化程序,同时从 application.properties 加载自定义值。

我认为这应该可行,这是我从头到尾写的。

@Configuration
public class JacksonConfiguration {

@Value("${customValue}")
private int myCustomValue;

@Bean
public ObjectMapper objectMapper() {
final ObjectMapper mapper = new ObjectMapper();

final SimpleModule module = new SimpleModule();

module.addSerializer(new Deserializer(myCustomValue));
mapper.registerModule(module);

return mapper;
}
}

关于java - 如何在 Spring Boot 应用程序中将参数传递给自定义 JSON 反序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56639726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com