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

SpringBoot中GetMapping如何通过Postman以JSON格式传递参数

解决方案

问题根源

  1. HTTP规范中,GET请求通常不携带请求体,虽然Postman可以强制发送,但Spring对GET请求的@RequestBody支持存在局限性。
  2. 当前直接用@RequestBody String接收参数时,JSON格式的请求体(如{"email":"xxx@xxx.com"})会被Spring当作完整的字符串值传入,导致查询逻辑无法正确匹配邮箱。

方案一:改用POST请求(推荐,符合REST规范)

查询类接口如果需要传递复杂JSON参数,改用POST更符合行业实践,具体修改步骤如下:

1. 创建参数DTO类

定义一个数据类封装JSON请求参数:

data class EmailRequest(
    val email: String
)

2. 修改Controller方法

将@GetMapping改为@PostMapping,并通过DTO接收JSON参数:

@RestController
@RequestMapping("/users")
class UserController(@Autowired private val userRepository: UserRepository) {

    // 其他方法...

    @PostMapping("/email")
    fun findByUserEmail(@RequestBody request: EmailRequest): User? = 
        userRepository.findByEmail(request.email)
}

3. Postman请求配置

  • 请求方法选择POST
  • 请求体选择raw -> JSON格式,输入:
    {"email":"your-email@example.com"}
    
  • 请求头设置Content-Type: application/json

方案二:坚持使用GET请求(不推荐,不符合HTTP规范)

如果业务场景必须使用GET,可通过以下两种方式实现:

方式1:将JSON参数作为请求参数传递

把JSON字符串放在URL的请求参数中,后端解析后获取邮箱:

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import com.fasterxml.jackson.module.kotlin.readValue
import org.springframework.web.bind.annotation.RequestParam

@RestController
@RequestMapping("/users")
class UserController(@Autowired private val userRepository: UserRepository) {

    // 其他方法...

    @GetMapping("/email")
    fun findByUserEmail(@RequestParam("query") query: String): User? {
        val objectMapper = jacksonObjectMapper()
        val request = objectMapper.readValue<EmailRequest>(query)
        return userRepository.findByEmail(request.email)
    }
}

Postman配置:

  • 请求方法选择GET
  • 在Params中添加键值对:query={"email":"your-email@example.com"}

方式2:强制允许GET请求接收请求体

通过Spring配置开启GET请求的请求体支持(不推荐,可能存在兼容问题):

1. 添加配置类

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter

@Configuration
class WebConfig {
    @Bean
    fun requestMappingHandlerAdapter(): RequestMappingHandlerAdapter {
        val adapter = RequestMappingHandlerAdapter()
        // 允许GET请求处理请求体
        adapter.setSupportQueryParameters(false)
        // 添加Jackson JSON转换器
        val converters = adapter.messageConverters
        converters.add(MappingJackson2HttpMessageConverter())
        return adapter
    }
}

2. 修改Controller方法

同样使用DTO接收参数:

@GetMapping("/email")
fun findByUserEmail(@RequestBody request: EmailRequest): User? = 
    userRepository.findByEmail(request.email)

3. Postman配置

同方案一的请求体配置,选择JSON格式并设置Content-Type: application/json


内容的提问来源于stack exchange,提问作者Captai-N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:53:17