我有我的Chat.js
,他的参数已映射到@RestController
中,以缩短参数列表。但是,某些属性必须转换为自定义对象(即Long-> Instant)。我的问题是有一种方法可以让spring使用我的设置器来设置那些对象吗?
控制器映射
@ModelAttribute
ModelAttribute类
@GetMapping("/v1/my/path")
public Collection<Dto> getAll(@ModelAttribute MyRequest request) {
return someSevice.doSomething(request);
}
答案 0 :(得分:1)
您始终可以对对象使用自定义反序列化
检查下一个link
public class ItemDeserializer extends StdDeserializer<Item> {
public ItemDeserializer() {
this(null);
}
public ItemDeserializer(Class<?> vc) {
super(vc);
}
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
int id = (Integer) ((IntNode) node.get("id")).numberValue();
String itemName = node.get("itemName").asText();
int userId = (Integer) ((IntNode) node.get("createdBy")).numberValue();
return new Item(id, itemName, new User(userId, null));
}
}
答案 1 :(得分:0)
实现自己的转换器似乎是解决此问题的最佳解决方案,因为无法注释将用于填充@ModuleAttribute
的设置器。
@Component
public class StringToInstantConverter implements Converter<String, Instant> {
@Override
public Instant convert(String epochSeconds) {
return Instant.ofEpochSecond(Long.valueOf(epochSeconds));
}
}