[英]Can't read parameters from http post body in Spring Controller
[英]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 {
...
}
在課堂上這樣做
@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.