请求参数如何映射到木兰的 RenderingModel 中?
Posted
技术标签:
【中文标题】请求参数如何映射到木兰的 RenderingModel 中?【英文标题】:How are request parameters mapped into RenderingModel of magnolia? 【发布时间】:2017-05-05 19:49:40 【问题描述】:我将 Magnolia RenderingModel
与 Freemarker 结合使用。
我有如下网址:
http://anyPath/context?productTypes=XXXXX&productTypes=YYYYY
我的渲染模型类看起来像:
class MyModel extends RenderingModelImpl
...
private String[] productTypes;
...
但是,提到的数组只包含第一个值,而不包含第二个值。
我检查了ctx.getParameters()
等模板指令的行为。这显示了相同的行为,我只得到返回的第一个值。但如果我使用ctx.getParameterValues(paramName)
,它会返回两个值。
这导致我提出以下问题:
如果我想查找请求参数是如何映射到渲染模型中的,或者更好,我该怎么做: 如何改变它的行为? 谁能承认,这种行为是错误的?【问题讨论】:
【参考方案1】:它曾经在文档中被提及,我相信它仍然是 - 如果您使用.getParameters()
,您只会获得多值参数的第一个值。如果要获取所有值,需要使用.getParameterValues(String param)
。
据我了解,原因是向后兼容。
至于改变行为,您需要编写自己的渲染器(例如,通过扩展默认 FreemarkerRenderer
并覆盖 info.magnolia.rendering.renderer.AbstractRenderer.newModel(Class<T>, Node, RenderableDefinition, RenderingModel<?>)
实例化和填充模型类的方法。
或者,您可以为上述设置的填充方法提供修复,并将其作为补丁提交给 Magnolia。虽然 .getParameters()
行为是 iirc 故意的,但模型参数群体可能不是,所以你很有可能得到改变。
【讨论】:
以上是关于请求参数如何映射到木兰的 RenderingModel 中?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 前端请求参数自动映射到枚举,后端响应JSON数据自动解析枚举
Spring Boot 2从入门到入坟 | 请求参数处理篇:REST映射原理的详细分析