当前位置: 首页 > 知识库问答 >
问题:

如何在Spring MVC控制器中获取HttpRequest getEntity数据?

瞿子濯
2023-03-14
private ArrayList<NameValuePair> mParams;
HttpClient client = new DefaultHttpClient();

mParams = new ArrayList<NameValuePair>();
mParams.add(new BasicNameValuePair("testKey", "John"));
mParams.add(new BasicNameValuePair("testSerial", "003-100"));
HttpPost request = new HttpPost("http://localhost:8080/test/getRequiredEnv");

request.setEntity(new UrlEncodedFormEntity(mParams, HTTP.UTF_8));
HttpResponse response = client.execute(request);

//TestController。Java语言

@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");
}

有人能告诉我这是从SpringMVCRest控制器中的“Request.set实体”获取数据的正确方法吗?

其次,在邮递员“httpPost”请求中,我传递参数(testKey

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

共有1个答案

司马晋
2023-03-14

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

所以我猜你想得到请求的正文。要获取所有请求参数,如果您事先不知道参数名称,可以将RequestParam与Map一起使用

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
            @RequestParam Map<String, String> allParams,
            @RequestHeader HttpHeaders headers)

但我不确定这是否有效,因为它还取决于内容类型。E、 g.对于表单数据(应用程序/x-www-form-urlencoded),请查看关于@RequestBody的Spring文档,其中说明了一个默认的消息转换器FormHttpMessageConverter:

FormHttpMessageConverter将表单数据转换为MultiValueMap。

所以试试:

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
            @RequestBody MultiValueMap<String, String>,
            @RequestHeader HttpHeaders headers)

或者,还有HttpServletRequest。getParameterMap(),它将为您提供一个映射。只需将HttpServletRequest请求作为方法参数包含即可获得请求。

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

@RequestMapping(value = "/getRequiredEnv", method = RequestMethod.POST)
public @ResponseBody ResponseInfo getRequiredEnv(
        @@ModelAttribute Test myTestPojo,
        @RequestHeader HttpHeaders headers)

或者您也可以将数据作为应用程序/json发送,当将jackson作为依赖项包含时,@Request estbody将您的数据映射到POJO。看看例如,Spring JSON请求正文未映射到JavaPOJO。

关于您的第二个问题,httpPost将作为主体传递参数,因为它是POST请求。

 类似资料:
  • 问题内容: 我的控制器是这样的: 我的EX_Controller是这样的: 我的索引视图是这样的: 执行时,存在错误: 似乎无法在EX Controller中调用get_notification函数 我在所有控制器中放入了要读取的功能 有什么解决方案可以解决我的问题吗? 问题答案: 解决此问题的方法是只使用此方法:

  • 我有过 我通过这种方式传递profileJson: 但是我的配置文件Json对象具有所有空字段。我应该怎么做才能让Spring解析我的json?

  • 我想使用@SessionAttributes注释在SpringMVC中的两个控制器之间共享会话属性。 下面是我用来测试属性共享的一个简单代码:AController。JAVA a.jsp BController.java b.jsp 我期望的行为是转到 /aURL,myParam将被设置为0到99之间的随机值,然后该值将在两个控制器之间共享。 但是,会发生以下情况:我转到/a URL,myPara

  • 我必须在页面中显示/编辑表单。我从表中获取所有行,并以可编辑的表格式显示。一旦表格被编辑。我希望所有这些行在数据库中使用控制器更新,但是我不知道如何通过laravel 5.1中的请求对象获得所有表单行。 作为请求对象,只给出窗体的最后一行。有什么建议吗? 这是超文本标记语言的代码。在这里,我将选中所有行元素前面的复选框,以便我只想更新另一个表中的那些行。

  • 有一个spring mvc控制器资源来接收文件并将其存储在本地存储器中。请求是一个多部分(“内容类型:多部分/表单数据”),由几个部分组成。第一部分是文件的JSON/XML描述。第二个和以下是文件。但这些部分也可能是多部分的(“内容类型:多部分/混合”)。一部分中的文件很少。多部分中的多部分。 我必须根据请求结构将它们分组存储。身体txt和图片。gif来自一个组中的第二个表单数据部分,文件来自另一

  • 问题内容: 我是angularjs的新手,我知道它表示控制器和视图之间的连接,但是除了寻求获取scope元素之外,还有没有其他办法,我的意思是这样的: 我知道可以将同一控制器分配给多个作用域,所以也许是不可能的。 问题答案: 您可以将元素传递给控制器​​,就像作用域一样: