gpt4 book ai didi

java - 如何通过 DomainClassConverter 使用自定义 ID 转换?

转载 作者:行者123 更新时间:2023-12-01 10:59:09 27 4
gpt4 key购买 nike

我有一个 SQL 数据库,其中主键是 UUID,但 UUID 的规范字符串表示形式非常长,我想在 URL 中使用缩短版本 (Base58)。 Spring Data 的 DomainClassConverter 会将 MVC 请求参数或路径变量转换为域对象,但我希望能够在将解析的 ID 传递到存储库之前对其进行修改。

默认的SpringDataWebConfiguration使用上下文提供的FormattingConversionService创建一个DomainClassConverter,这可能不安全地任意破坏。向方法参数添加注释可能会消除解释的歧义,但这都必须在各处复制,并且不能与 Spring Data REST 等外部 Controller 一起使用。将(字符串参数->ID)转换委托(delegate)给转换服务的行为是硬连线在私有(private)内部类中的,因此我无法在那里修改它。

是否有任何非侵入性的方法来拦截参数并在将其传递给 RepositoryInvoker 之前对其进行转换?

最佳答案

最简单的方法是创建自己的格式化程序

喜欢:

public class UserFormatter implements Formatter<User> {

@Autowired
UserRepository userRepository;

@Override
public User parse(String text, Locale locale) throws ParseException {
return userRepository.findOneByUsername(text);
}

@Override
public String print(User user, Locale locale) {
return user.getUsername();
}
}

然后将其注册到您的应用程序上下文中:

@Configuration
@EnableSpringDataWebSupport
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.addFormatter(userFormatter());
}
@Bean
public UserFormatter userFormatter() {
return new UserFormatter();
}
}

@EnableSpringDataWebSupport 用于将大量 bean 引入上下文,请参阅其 javadoc - 内容非常丰富

最佳

关于java - 如何通过 DomainClassConverter 使用自定义 ID 转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33459036/

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