Java 如何在SpringMVC控制器中获取HttpRequestGetEntity数据?

Java 如何在SpringMVC控制器中获取HttpRequestGetEntity数据?,java,spring,web-services,spring-mvc,Java,Spring,Web Services,Spring Mvc,有人能告诉我这是从SpringMVC rest控制器中的“Request.setEntity”获取数据的正确方法,还是我遗漏了什么 其次,在邮递员“httpPost”请求中,我将参数(testKey和testValue)作为头或体传递 第三,在不知道httpPost请求中的参数的情况下,我能够解析传入请求并在Spring controller中从中提取参数吗?首先,最好知道发送的请求的内容类型 所以我猜你想得到请求的主体。要获取所有请求参数,如果事先不知道参数名称,可以使用@RequestPar

有人能告诉我这是从SpringMVC rest控制器中的“Request.setEntity”获取数据的正确方法,还是我遗漏了什么

其次,在邮递员“httpPost”请求中,我将参数(testKey和testValue)作为头或体传递


第三,在不知道httpPost请求中的参数的情况下,我能够解析传入请求并在Spring controller中从中提取参数吗?

首先,最好知道发送的请求的内容类型

所以我猜你想得到请求的主体。要获取所有请求参数,如果事先不知道参数名称,可以使用
@RequestParam
Map
类型来获取所有参数:

@RestController
public class TestController {   

private static final Logger logger = Logger.getLogger(TestController.class);

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
                @RequestParam("testKey") String testKey, 
                @RequestParam("testValue") String testValue, 
                @RequestHeader HttpHeaders headers) {

    logger.info("Test Key [" + testKey + "]");
    logger.info("Test Value [" + testValue + "]");

    return new TestResponseInfo("0001", "ABC");
}
另外还有一个
HttpServletRequest.getParameterMap()
,它可以为您提供一个映射。只需将
HttpServletRequest
作为方法参数,即可获得请求

如果您事先知道参数,那么使用
@modeldattribute
注释类似于表单数据的POJO也应该像这样工作:

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
            @RequestBody MultiValueMap<String, String>,
            @RequestHeader HttpHeaders headers)
或者,您也可以将数据作为application/json发送,当将jackson作为依赖项包含时,
@Requestbody
会将您的数据映射到POJO。看一看


关于第二个问题,httpPost将以正文形式传递参数,因为这是一个POST请求。

感谢@dudel的详细阐述。你能告诉我有什么方法可以简单地打印从客户端发送的原始请求/数据而不需要知道参数或任何其他东西吗?在这种情况下,你可以使用
HttpServletRequest
中的
getInputStream()
getReader()
,但请注意,你只能读取一次。完美。我们是否可以稍后按照下面的链接中所述读取请求/数据?嗯,你的意思是使用@RequestBody并且仍然拥有来自inputstream的数据?这将变得更加复杂,但可以使用链接中描述的ServletFilter。此外,此答案可能会对您有所帮助,尽管其目的不同:
@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
            @RequestParam Map<String, String> allParams,
            @RequestHeader HttpHeaders headers)
@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
            @RequestBody MultiValueMap<String, String>,
            @RequestHeader HttpHeaders headers)
@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
        @@ModelAttribute Test myTestPojo,
        @RequestHeader HttpHeaders headers)