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

使用spring的网络服务,我必须从我的post请求的主体中获取参数? 身体的内容如下: –

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 saveData(@RequestBody String a) throws MyException { return new ResponseEntity(uiRequestProcessor.saveData(a),HttpStatus.OK); } 

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

您可以根据要求获得参数。

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

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

  public ResponseEntity saveData(@RequestBody RequestDTO req) 

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

       

您可以将整个post正文放入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请求对象匹配。

在课堂上这样做

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

在页面中这样做:

 

你需要这些import……

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

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

  javax.servlet javax.servlet-api 3.0.1 provided  

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

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