提供有关Spring控制器的Java泛型的信息
我有一个控制器,看起来像这样:提供有关Spring控制器的Java泛型的信息,java,spring-mvc,generics,jackson,Java,Spring Mvc,Generics,Jackson,我有一个控制器,看起来像这样: 类GenericController{ 私有最终类resolvedClass; GenericNoSimizeController(类resolvedClass){ this.resolvedClass=resolvedClass; } @邮戳(“/”) 公共T句柄(@RequestBody final T object){ //需要resolvedClass的doStuff } 在代码的另一个地方,我正在检查一个类列表(我无法预先知道),并为每个类创建一个新的
类GenericController{
私有最终类resolvedClass;
GenericNoSimizeController(类resolvedClass){
this.resolvedClass=resolvedClass;
}
@邮戳(“/”)
公共T句柄(@RequestBody final T object){
//需要resolvedClass的doStuff
}
在代码的另一个地方,我正在检查一个类列表(我无法预先知道),并为每个类创建一个新的GenericController
类实例,并以编程方式在自定义RequestMappingHandlerMapping
中注册它
Class resolvedClass=//给我这个类的东西
GenericController=新的GenericController(resolvedClass);
//以编程方式注册它
问题是handle()
中的代码需要resolvedClass的实例,但由于类型擦除,Jackson反序列化到对象
,给了我一个LinkedHashMap
的实例,该实例在运行时中断了我的代码
我当前的解决方案使用了一种变通方法,在这种方法中,我将对象作为字符串接收,然后显式使用ObjectMapper来获取实例:
@PostMapping(“/”)
公共T句柄(@RequestBody final String对象){
T反序列化对象=objectMapper.readValue(对象,resolvedClass);
//需要resolvedClass的doStuff
}
我只是想知道是否有任何方法可以在方法上指出我想要的类型,因为当前的解决方法并不理想,并且会在我的代码上导致一些集成问题。我想你可以用这个方法来解决一些问题:我不确定我是否完全理解解决方案:是否需要请求填充一些额外的字段对类型进行初始化,这样自定义反序列化器就可以完成这项工作了?如果是这样,恐怕我无法修改传入的请求来传递这些标识符。我想你可以这样做:我不确定我是否完全理解解决方案:是否需要在请求中填充一些额外的字段来指示类型,这样自定义反序列化器就可以了alizer可以完成这项工作吗?如果可以,恐怕我无法修改传入的请求来传递这些标识符。