java - Spring boot Rest controller - 将表单编码的主体转换为 POJO

标签 java spring rest spring-boot httprequest

我想处理一个 HTTP POST 请求到达我的休息端点并将其主体转换为我定义的 POJO。过去我在 JSON 和 POJO 之间的映射方面取得了成功,但我在处理这种形式的编码内容时遇到了困难。

我有一个 Controller 如下:

@Slf4j
@RestController("/example")
public class GatewayController {

    @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
    public void describeInstances(@RequestBody MyPojo body) {

        log.debug("Value1: " + body.getValue1());

    }

}

还有一个 POJO:

@Data
public class MyPojo {

 private String value1;
 private String value2;
 ...
}

我正在使用如下所示的 POST 请求访问 Controller :

Content-Type: application/x-www-form-urlencoded
Body: value1=abc&value2=efg...

但我得到的只是415 Unsupported Media Type。感谢您的帮助。

编辑:当我将 POJO 更改为 String 并仅打印正文时,它可以工作(没有收到不受支持的媒体类型异常)所以它肯定在 POJO 声明中。

跟进:

是否可以注释 POJO 属性以允许字段的不同名称(例如,避免在变量名称中使用 undorscope)?

类似于:

@Attribute("value_name")
private String valName;

最佳答案

@ModelAttribute 是在 Controller 中获取表单数据的推荐方式。例如

public void describeInstances(@ModelAttribute("mypojo") MyPojo body)

@Data
@ModelAttribute("mypojo")
public class MyPojo {

阅读 spring 文档以获取更多信息 here

关于java - Spring boot Rest controller - 将表单编码的主体转换为 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312285/

相关文章:

android - 单击任何按钮刷新选项卡布局中的 fragment

java - 如何表示 Java Future 结果失败

java - @GetMapping 不序列化 ID

java - 如何设置 h2 tcp 服务器通过 IPv4 监听 tcp?

spring - 我是否必须 try catch JpaRepository

java - mybatis查询参数为0,数据异常。为什么?

node.js - Rest API - 如何以正确的方式提供数据

java - 将所有 `@QueryParam` 映射到 `JSON` 数据结构

java - Spring 启动: How to set spring properties dynamically

java - 为什么我在此 REST 教程中得到 404?