Spring:如何从POST主体获取参数?

时间:2014-03-04 05:07:31

标签: java spring rest spring-mvc

使用spring的网络服务,我必须从我的帖子请求的正文中获取参数?身体的内容如下: -

source=”mysource”

&json=
{
    "items": [
        {
            "username": "test1",
            "allowed": true
        },
        {
            "username": "test2",
            "allowed": false
        }
    ]
}

网络服务方法如下: -

@RequestMapping(value = "/saveData", headers="Content-Type=application/json", method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<Boolean> saveData(@RequestBody String a) throws MyException {
        return new ResponseEntity<Boolean>(uiRequestProcessor.saveData(a),HttpStatus.OK);

    }

请告诉我如何从身体中获取护身符?我可以把整个身体都放在我的绳子里,但我认为这不是一个有效的方法。请让我知道如何进一步。

6 个答案:

答案 0 :(得分:17)

你可以从请求中获得参数。

@ResponseBody
public ResponseEntity<Boolean> saveData(HttpServletRequest request,
            HttpServletResponse response, Model model){
   String jsonString = request.getParameter("json");
}

答案 1 :(得分:12)

您可以将整个帖子正文转换为POJO。以下是类似的东西

@RequestMapping(value = { "/api/pojo/edit" }, method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
@ResponseBody
public Boolean editWinner( @RequestBody Pojo pojo) { 

Pojo中的每个字段(包括getter / setter)应该与控制器接收的Json请求对象匹配..

答案 2 :(得分:7)

您可以使用MappingJacksonHttpMessageConverter将json绑定到POJO。因此,您的控制器签名可以是: -

  public ResponseEntity<Boolean> saveData(@RequestBody RequestDTO req) 

其中RequestDTO需要是一个适当注释的bean,以便与jackson序列化/反序列化一起使用。你的* -servlet.xml文件应该在RequestMappingHandler中注册Jackson消息转换器,如下所示: -       

  <list >
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>

  </list>
</property>
</bean>

答案 3 :(得分:2)

在课堂上这样做

@RequestMapping(value = "/saveData", method = RequestMethod.POST)
 @ResponseBody
    public ResponseEntity<Boolean> saveData(HttpServletResponse response,Bean beanName) throws MyException {
        return new ResponseEntity<Boolean>(uiRequestProcessor.saveData(a),HttpStatus.OK);

}

在页面中这样做:

<form enctype="multipart/form-data" action="<%=request.getContextPath()%>/saveData" method="post" name="saveForm" id="saveForm">
<input type="text" value="${beanName.userName }" id="username" name="userName" />

</from>

答案 4 :(得分:1)

您将需要这些导入......

import javax.servlet.*;
import javax.servlet.http.*;

而且,如果您正在使用Maven,那么您还需要在项目基本目录中的pom.xml文件的依赖项块中使用它。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

然后Jason上面列出的修复工作将会起作用:

@ResponseBody
    public ResponseEntity<Boolean> saveData(HttpServletRequest request,
        HttpServletResponse response, Model model){
        String jsonString = request.getParameter("json");
    }

答案 5 :(得分:0)

您可以尝试使用@RequestBodyParam

@RequestMapping(value = "/saveData", headers="Content-Type=application/json", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Boolean> saveData(@RequestBodyParam String source,@RequestBodyParam JsonDto json) throws MyException {
    ...
}

https://github.com/LambdaExpression/RequestBodyParam