【问题标题】:Spring Converters for @RequestParam@RequestParam 的 Spring 转换器
【发布时间】:2014-04-26 09:08:16
【问题描述】:

我想在我的控制器中拥有表单字段的 InputStream,@RequestParam 是 String 还是 MultipartFile。有谁知道如何正确注册转换器。我想要达到的效果是这样的

@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();
   }
}

【问题讨论】:

  • 查看WebDataBinder@InitBinder 类。
  • PropertyEditors 可以使用文本表单,但是当我只想要它的内容时,我认为它们不是文件表单的好解决方案。
  • 这几乎是使用@RequestParam 的唯一方法。查看@RequestBody 以直接获取InputStream

标签: java spring spring-boot


【解决方案1】:

我找到了一些解决方案。

如果配置类扩展 WebMvcConfigurationSupport 我可以覆盖方法 public FormattingConversionService 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;
   }
}

我想知道是否有人有更好的解决方案。

【讨论】:

    猜你喜欢
    • 2018-03-25
    • 2022-11-23
    • 2018-06-03
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多