2017-02-02 51 views
0

我建立REST API(不公開,只爲我自己的網站的後端),我有用於註冊新用戶控制器:使用POST註冊用戶 - 如何正確使用ResponseEntity?

// CREATE A USER 
@PostMapping("/register") 
public ResponseEntity<?> createUser(
     @RequestBody User user 
) { 
    if (userService.userExists(user)) { 
     return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("User with that username already exists."); 
    } 
    return ResponseEntity.ok(userService.saveUser(user)); 
} 

我不喜歡在我的ResponseEntity該字符串時,用戶名已採取 - 處理這些事情的正確方法是什麼?我知道我應該從我的所有控制器中返回JSON,但我不知道如何在該方法中實現它。

而且在JSON是隻返回一個用戶名罰款此控制器:

// DELETE YOUR ACCOUNT - deletes logged in user 
@DeleteMapping("/delete") 
public ResponseEntity<?> deleteUser(Principal principal) { 
    userService.deleteUser(principal); 
    return ResponseEntity.ok(principal.getName()); 
} 

我還在一下一下地在REST控制器返回非常困惑 - 什麼都要只是JSONs(我知道我也可以使用XML(和其他一些),但選擇了JSON)+狀態碼?當我嘗試構建該webapp的前端時,這會很容易使用嗎?

+1

DELETE和UPDATE可以返回刪除或更新行數 - 在你的情況下0或1 。 – StanislavL

+0

我正在使用實體和數據庫 - 你是什麼意思刪除行?我只是好奇它應該如何以正確的方式進行實施。 – doublemc

回答

1

剛剛嘗試這可以是任何幫助

// CREATE A USER 
@PostMapping("/register") 
public @ResponseBody ResponseEntity<JSONObject> createUser(@RequestBody User user) { 

    JSONObject responseJson = new JSONObject(); 

    if (userService.userExists(user)) { 

     responseJson.put("status", "User with that username already exists."); 

     return new ResponseEntity<JSONObject>(responseJson, HttpStatus.BAD_REQUEST); 
    } 

    responseJson.put("status", "User created."); 

    return new ResponseEntity<JSONObject>(responseJson, HttpStatus.OK); 
} 
0

便捷的方式與optional做到這一點:

@PostMapping("/register") 
    /* */ 
    Optional<User> optionalUser = userService.findUserById(userId); 
    // or userService.findUserByName(username); 
    return Optional.ofNullable(optionalUser) 
     .map(u -> { 
       return getBadRequestResponse(Sting.format("User with name : %s already exists", username)); 
      } 
     ).orElse(getSuccessfulResponse(
        new userService.addUser(user))); 

[...] 

    protected ResponseEntity getSuccessfulResponse(Object result) { 
    return new ResponseEntity(result, HttpStatus.OK); 
    } 

    protected ResponseEntity getBadRequestResponse(String message) { 
    return new ResponseEntity(new RestErrorResponse(message), HttpStatus.BAD_REQUEST); 
    }