Java @RequestParam的弹簧转换器
当Java @RequestParam的弹簧转换器,java,spring,spring-boot,Java,Spring,Spring Boot,当@RequestParam是String或MultipartFile时,我希望在我的控制器中有表单字段的InputStream。有人知道如何正确注册转换器吗。我想要的是这样的 @RequestMapping(value = "/test", method = RequestMethod.POST) void sendData(@RequestParam("data") InputStream){ // Deal with InputStream } 我已经编写了两个转换器,但我不确定如
@RequestParam
是String或MultipartFile时,我希望在我的控制器中有表单字段的InputStream。有人知道如何正确注册转换器吗。我想要的是这样的
@RequestMapping(value = "/test", method = RequestMethod.POST)
void sendData(@RequestParam("data") InputStream){
// Deal with InputStream
}
我已经编写了两个转换器,但我不确定如何在spring boot中注册它们并强制它们工作:
public class StringToStreamConverter implements Converter<String, InputStream> {
@Override
public InputStream convert(String source) {
return new ByteArrayInputStream(source.getBytes());
}
}
public class MultipartFileToStreamConverter
implements Converter<MultipartFile, InputStream> {
@Override
public InputStream convert(MultipartFile source) {
return source.getInputStream();
}
}
公共类StringToStreamConverter实现转换器{
@凌驾
公共输入流转换(字符串源){
返回新的ByteArrayInputStream(source.getBytes());
}
}
公共类MultipartFileToStreamConverter
机具转换器{
@凌驾
公共输入流转换(多部分文件源){
返回source.getInputStream();
}
}
我找到了一些零件解决方案
如果配置类扩展了WebMvcConfigurationSupport
我可以重写方法公共格式化转换服务mvcConversionService()
,在这里我可以添加转换器,它就可以正常工作了
@Configuration
public class TestConfig extends WebMvcConfigurationSupport {
@Override
public FormattingConversionService mvcConversionService() {
FormattingConversionService f = super.mvcConversionService();
f.addConverter(new StringToStreamConverter());
f.addConverter(new MultipartFileToStreamConverter());
return f;
}
}
我想知道是否有人有更好的解决方案。看看
WebDataBinder
和@InitBinder
类。propertyeditor
可以使用文本表单,但我不认为它们是文件表单的好解决方案,因为我只需要它的内容。这几乎是@RequestParam
实现这一点的唯一方法。查看@RequestBody
以直接获取InputStream
。