首页 > 解决方案 > 具有别名参数名称以接受 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 中的参数名称。

谢谢..!

标签: javaspringspring-boothttprequestx-www-form-urlencoded

解决方案


我能够完成这项工作。感谢@neetash 指导我。

我需要的只是一个自定义 HandlerMethodArgumentResolver 来将发布请求正文数据映射到我想要获取的对象。

我按照以下链接教程来实现它。它包含创建 HandlerMethodArgumentResolver 需要知道的每一件事。

https://www.petrikainulainen.net/programming/spring-framework/spring-from-the-trenches-creating-a-custom-handlermethodargumentresolver/


推荐阅读