java - 使用别名参数名称来接受 Url 编码表单数据值

标签 java spring spring-boot httprequest x-www-form-urlencoded

在我的 Spring Web 应用程序中,我有一个 API,它接受 application/x-www-form-urlencoded 内容类型的请求。

@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。但是,现在我需要接受具有以下模式字段的请求。

param_one, param_two

我知道,在我的请求 dto 中的字段上使用 @JsonProperty 注释在我的情况下不起作用,因为请求不是 application/json 类型。

我发现解决该问题的唯一方法是创建如下所示的新 setter (在我看来,在命名约定方面这看起来很难看)。

public void setParam_one(String param_one) {
        this.paramOne = param_one;
}

有人可以帮我找到一种更好的方法来完成这项工作吗?我无法更改原始请求 dto 中的参数名称。

谢谢你..!

最佳答案

我能够完成这件事。感谢@neetash 指导我。

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

我按照以下链接教程来实现它。它包含创建 HandlerMethodArgumentResolver 所需了解的所有内容。

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

关于java - 使用别名参数名称来接受 Url 编码表单数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60635584/

相关文章:

Java:读取文本文件然后转换的问题

Java Spring : JUnit Hamcrest: Expecting Collection

java - 如何在 Mac 上恢复已删除的 java 文件?

spring - 为什么 Spring Data Rest 只允许来自 ManyToOne/ManyToMany 的所有者端的更新?

Java - 可以在不解压的情况下修改和解析 gzipped xml 文件吗?

java - Spring Java - 可以将查询字符串添加到重定向 ModelAndView 吗?

java - Spring 批处理管理。元表保持为空

java - 如何使用规范中的 CriteriaQuery 来订购列表?

java - NoSuchBeanDefinitionException : No qualifying bean of type

spring - 如何通过特定主体名称删除现有 session