我的Web应用程序的UI可以上传文件(csv),或在请求正文中将数据作为json发送。但是,文件上传或json请求将出现在请求中,而不是两者都出现。我正在创建一个spring rest控制器,该控制器结合了文件上传功能,还接受了请求的json值。
在邮递员测试以下端点之后,我没有出现异常:
org.apache.tomcat.util.http.fileupload.FileUploadException:由于未找到多部分边界,请求被拒绝
@RestController
public class MovieController {
private static final Logger LOGGER = LoggerFactory.getLogger(MovieController.class);
@PostMapping(value="/movies", consumes = {"multipart/form-data", "application/json"})
public void postMovies( @RequestPart String movieJson, @RequestPart(value = "moviesFile") MultipartFile movieFile ) {
// One of the below value should be present and other be null
LOGGER.info("Movies Json Body {}", movieJson);
LOGGER.info("Movies File Upload {}", movieFile);
}
}
是否对解决此问题有帮助?
注意:我能够为文件上传和json请求构建两个单独的终结点,但这不能满足我的要求。因此,我正在寻找一种将两者结合的解决方案
答案 0 :(得分:0)
我建议创建两个单独的端点。这将拆分和隔离不同的功能并降低代码的复杂性。此外,测试会更容易并提供更好的可读性。
您的客户实际上必须知道要使用哪个变量。因此,只需为您的请求选择不同的端点,而不是为同一端点使用不同的变量。
@PostMapping(value="/movies-file-upload", consumes = {"multipart/form-data"})
public void postMoviesFile(@RequestPart(value = "moviesFile") MultipartFile movieFile ) {
LOGGER.info("Movies File Upload {}", movieFile);
}
@PostMapping(value="/movies-upload", consumes = {"application/json"})
public void postMoviesJson( @RequestPart String movieJson) {
LOGGER.info("Movies Json Body {}", movieJson);
}
答案 1 :(得分:-1)
尝试类似的东西:
{{1}}
在RequestBody中,您可以添加要发送的参数。
这不会将数据作为JSON发送。
编辑:-我忘了为Multipart文件添加变量,而我在春季错误地使用了预留关键字RequestBody。
希望对您有所帮助。