You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring POST接口接收x-www-form-urlencoded报415错误排查

问题原因及解决方案

问题根源

你用@RequestBody注解接收application/x-www-form-urlencoded格式的请求体是错误用法。Spring中@RequestBody负责读取请求体原始内容,并通过对应HttpMessageConverter转换为目标对象,但默认情况下Spring没有提供将x-www-form-urlencoded键值对直接转为自定义对象(如你的FilterObj)的转换器,因此返回415 Unsupported Media Type错误。

x-www-form-urlencoded本质是键值对参数,需要用Spring的参数绑定机制处理,而非@RequestBody的请求体解析机制。

解决方案

将@RequestBody替换为@ModelAttribute(或直接省略注解,Spring会默认用@ModelAttribute做参数绑定),修改后的控制器代码如下:

@PostMapping(value = "/v1/contracts", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<Object> fetchFilteredContracts(
        @ModelAttribute FilterObj body,
        @RequestParam(required = false) String number,
        @RequestParam(required = false) String supplierNumber
) {
    List<DataTableFilter.ColumnFilter> columnFilters = new ArrayList<>();

    if (number != null) {
        columnFilters.add(new DataTableFilter.ColumnFilter("number", number));
    }

    if (supplierNumber != null) {
        columnFilters.add(new DataTableFilter.ColumnFilter("supplierNumber", supplierNumber));
    }

    // Additional code not implemented yet

    return new ResponseEntity<>(HttpStatus.OK);
}

也可以直接省略注解,写法如下(效果完全一致):

public ResponseEntity<Object> fetchFilteredContracts(
        FilterObj body,
        @RequestParam(required = false) String number,
        @RequestParam(required = false) String supplierNumber
) {
    // ... 原有逻辑不变
}

额外注意事项

确保Postman请求配置正确:

  • 请求方法选择POST
  • 请求头Content-Type设置为application/x-www-form-urlencoded
  • Body选项卡选择x-www-form-urlencoded类型,添加search_mode参数及对应值

内容的提问来源于stack exchange,提问作者BluePrint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:27:08