Java 通用目标的弹簧转换器

Java 通用目标的弹簧转换器,java,spring,Java,Spring,在路径变量和泛型对象之间转换时,Spring选择错误的转换器时出现问题。如果我有两个转换器,则在第一次请求时会选择正确的转换器,但随后会继续用于后续请求 因此,给出下面的示例,无论我首先点击哪个URL,都可以正常工作,但是无论我之后访问哪个URL,都会使用初始转换器 @Bean public Converter<String, Optional<ThingOne>> ... @Bean public Converter<String, Optional<Th

在路径变量和泛型对象之间转换时,Spring选择错误的
转换器时出现问题。如果我有两个转换器,则在第一次请求时会选择正确的转换器,但随后会继续用于后续请求

因此,给出下面的示例,无论我首先点击哪个URL,都可以正常工作,但是无论我之后访问哪个URL,都会使用初始转换器

@Bean
public Converter<String, Optional<ThingOne>> ...

@Bean
public Converter<String, Optional<ThingTwo>> ...


@RequestMapping("/thingone/{thingOneId}")
public void (@PathVariable("thingOneId") @ModelAttribute("thing") Optional<ThingOne> thing) {
...

@RequestMapping("/thingtwo/{thingTwoId}")
public void (@PathVariable("thingTwoId") @ModelAttribute("thing") Optional<ThingTwo> thing) {
...
@Bean
公共转换器。。。
@豆子
公共转换器。。。
@请求映射(“/thingone/{thingOneId}”)
public void(@PathVariable(“thingOneId”)@ModelAttribute(“thing”)可选内容){
...
@请求映射(“/thingtwoo/{thingtwooid}”)
公共无效(@PathVariable(“thingTwoId”)@ModelAttribute(“thing”)可选内容){
...
我尝试创建一个
ConditionalGenericConverter
,这样我就有机会检查已解析的类型,但它似乎做了同样的事情。一旦它找到一个转换器,它会缓存该转换器,以备将来使用,并且它不会再检查其他转换器


所以我的问题是,我做得不对吗?有没有比实现一个必须处理所有字符串->可选转换的
GenericConverter
更好的方法呢?

考虑为每个字符串创建一个TinyType

public static class OptionalThingOne extends Optional<ThingOne>{}

public static class OptionalThingTwo extends Optional<ThingTwo>{}

删除
@modeldattribute
不要在单个字段上混合使用
@PathVariable
@modeldattribute
。。我只是尝试了一下,但没有解决。但是我同意,由于输入,在那里使用它是错误的!我不喜欢这增加的膨胀,但我更喜欢一个我不喜欢的解决方案,而不是没有解决方案。因此,你会选择请不要投我的票,谢谢!
public static class OptionalThingOne extends AtomicReference<Optional<ThingOne>>{}