網頁

2019/2/24

使用SpringBoot打造記帳簿專案(二十四)註冊Controller

本篇要寫一支接收夾帶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


若把memberAccountmemberPassword參數從輸入的json中移除,例如改為

{
    "memberName":"John"
}

則輸出結果如下,狀態為400 Bad Request



參考:

沒有留言:

張貼留言