Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @RequestParam的弹簧转换器_Java_Spring_Spring Boot - Fatal编程技术网

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