簡體   English   中英

Spring:如何從 POST 正文中獲取參數?

[英]Spring: How to get parameters from POST body?

使用 spring 的 Web 服務,我必須從我的帖子請求正文中獲取參數? 正文內容如下:-

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);

    }

請讓我知道如何從身體獲取參數? 我可以在我的字符串中獲取整個身體,但我認為這不是一種有效的方法。 請讓我知道我該如何繼續。

您可以將整個帖子正文放入 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 請求對象。

您可以從請求中獲取參數。

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

您可以使用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>

您可以嘗試使用@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

在課堂上這樣做

@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>

您將需要這些進口...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM