java - 具有别名参数名称以接受 Url Encoded Form 数据值
问题描述
在我的 Spring Web 应用程序中,我有一个接受application/x-www-form-urlencoded
内容类型请求的 API。
@RequestMapping(value = "/do-it", method = {RequestMethod.POST})
public String test(@ModelAttribute("request")RequestDTO request,HttpServletRequest
httpServletRequest, Map<String, Object> model, RedirectAttributes redirectAttributes){
.....
}
我的 RequestDTO 中有以下字段。
public class RequestDTO {
private String paramOne;
private String paramTwo;
// standard getters and setters
}
此实现工作正常,所有请求参数都按预期映射到请求 dto。但是,现在我有这个要求来接受具有以下模式的字段的请求。
参数一,参数二
我知道,在我的请求 dto 中的字段上使用 @JsonProperty 注释在我的情况下不起作用,因为请求不是应用程序/json的类型。
我发现解决该问题的唯一方法是创建新的设置器,如以下(在我看来,在命名约定方面看起来很丑)。
public void setParam_one(String param_one) {
this.paramOne = param_one;
}
有人可以帮助我找到更好的方法来完成这项工作吗?我无法更改原始请求 dto 中的参数名称。
谢谢..!
解决方案
我能够完成这项工作。感谢@neetash 指导我。
我需要的只是一个自定义 HandlerMethodArgumentResolver 来将发布请求正文数据映射到我想要获取的对象。
我按照以下链接教程来实现它。它包含创建 HandlerMethodArgumentResolver 需要知道的每一件事。
推荐阅读
- html - CSS 选择器对 h1 标签不起作用
- vue.js - Vue动态组件模板不适用于承诺
- html - 简单的 css 容器不会按应有的方式对齐元素
- arrays - 是否有一种方法可以在将数组传递给像 for 循环这样的循环时考虑数组中的所有元素?
- postgresql - Postgresql 12 流式复制:恢复副本但仍无法正常工作
- node.js - 'newman' 未被识别为内部或外部命令
- rest - NetSuite REST API 调用是否存在已知的偏移限制?
- javascript - 如何使用 google calendar api 使用 HTTP POST 请求从 chrome 扩展插入新事件?
- python - Pandas to_hdf() TypeError: 'int' 类型的对象没有 len()
- java - Requestcontextholder 在 IBM Web Sphere 上的 spring 4.x Web 应用程序中具有并发访问权限?