Spring boot Rest控制器 - 将表单编码的主体转换为POJO

时间:2015-08-31 13:20:36

标签: java spring rest spring-boot httprequest

我想处理一个HTTP POST请求命中我的休息端点并将其主体转换为我定义的POJO。我过去在JSON和POJO之间的映射方面取得了成功,但我正在努力使用这种表单编码内容。

我有一个控制器如下:

@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请求命中控制器,如下所示:

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;

1 个答案:

答案 0 :(得分:2)

@ModelAttribute是在控制器中获取表单数据的推荐方法。例如

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

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

阅读春季文档了解更多信息here