我正在从Google Guice和JAX-RS迁移到Sping Boot 。以前我看起来像这样的方法:
@POST
@Path("/generateTable")
public ExportResult generateTable(@FormParam("content") TableParam tableParam,
@FormParam("panel") PanelParam panelParam,
@FormParam("entityData") EntityDataParam entityDataParam,
@FormParam("drillPath") TypoParam typoParam)
字符串
现在我需要在Sping Boot 中迁移此代码。我已经在Chrome DevTools上查看了到达此端点的请求,并且在有效负载中它具有表单数据参数。
在将代码重写到Sping Boot 时,我意识到我不能用@RequestParam替换@FormParam,所以我的一个解决方案是使用这个:
@PostMapping("/generateTable")
public ExportResult generateTable(@RequestBody MultiValueMap<String, String> formData) {
型
但是当使用这种方法时,我需要从formData散列表中获取参数,并手动将它们解析为相应的对象。有没有一种方法可以自动完成这一点,而无需我检查是否已传递参数以及其他参数。还有另一种方法,我在考虑是否可以创建一个包含请求中所有参数的自定义对象,并使用@ RequestBody自动解析?
任何其他方法都将有很大的帮助!
2条答案
按热度按时间tgabmvqs1#
使用
@RequestParam
annotation将JAX-RS请求重写到Sping Boot MVC很简单。在您的示例中,类似于以下内容:字符串
此外,您还需要提供从String到Java对象的转换器。您可以在现有类中识别必要的代码。它可以是带有单个String参数的构造函数,也可以是名为
valueOf()
或fromString()
的静态方法,或者是ParamConverterProvider
的注册实现。使用此代码并在Spring组件中实现
Converter<S, T>
接口。类似于下面的示例。它从JSON String构造Customer对象:型
knpiaxh12#
实际上,你可以限制内容类型,并使用对象类来接受参数。
在控制器上:
字符串
FormDataDTO:
型
TinyDTO:
型
如何申请?你可以这样测试:
型
回应是:
型