本篇要寫一支接收夾帶json請求的Controller。
在pom.xml
加入Apache Commons Lang套件如下,這套件有很多好用的方法,例如常用的StringUtils
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
在src/main/java
下建立一支用來接收json的Dto(Data Transfer Object)物件RegisterDto
,放在idv.matt.dto
下。此用來接收使用者在前端畫面註冊時的輸入資料。
package idv.matt.dto;
public class RegisterDto {
private String memberAccount;
private String memberPassword;
private String memberName;
// 省略getter/setter
}
在src/main/java
下的idv.matt.controller
建立一支RegisterController
如下:
package idv.matt.controller;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import idv.matt.dto.RegisterDto;
@RestController
public class RegisterController {
private static final Logger log = LoggerFactory.getLogger(RegisterController.class.getName());
@PostMapping(value = "/register", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity registerApi(@RequestBody RegisterDto registerDto) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(registerDto); // 將輸入參數物件轉json字串
if (StringUtils.isAnyBlank(registerDto.getMemberAccount(), registerDto.getMemberPassword())) {
return ResponseEntity.badRequest().body(jsonString);
}
return ResponseEntity.ok().body(jsonString);
}
}
當呼叫http://localhost:8080/moneynote/register
並在Request Body放入傳入的json參數,會導向RegisterController.registerApi
方法,Spring會自動將json轉成RegisterDto
。
注意這邊是用@PostMapping
,所以待會測試時傳入uri的HTTP Method要設為POST
。
接著請安裝Postman來幫助我們發送自訂的Request給專案,藉此來確認RegisterController.register()
是否能正確接收請求中的json。
在Eclipse將專案啟動,然後開啟Postman,並完成下面設定後按Send送出請求。
輸入json的key的名稱記得要用雙引號"
包起,每個key-value記得用,
,最後一個key-value參數後注意不能有,
。
{
"memberName":"John",
"memberAccount":"john@abc.com",
"memberPassword":"12345"
}
若執行正確輸出如下,回應狀態(HTTP Response Status)為200 OK。
若把memberAccount
或memberPassword
參數從輸入的json中移除,例如改為
{
"memberName":"John"
}
則輸出結果如下,狀態為400 Bad Request
參考:
沒有留言:
張貼留言