此文主要是想在觀念上有所擴充。在日常的介面開發時,資料的輸出可以有兩種方式:
- 返回(常見)
- 丟擲(可以理解為越級的、越型別的返回)
我們經常會看到類似這樣的案例。為了同時支援正常的資料和錯誤狀態,選擇一個通用的弱型別:
@Mapping("api/v1/demo")
@Controller
public class DemoController{
@Inject
UserService userService;
@Mapping("getUser")
public Result getUser(long userId){ //注意此處的返回型別
User user = userService.getUser(userId);
if(user == null){
return Result.failure(4001, "使用者不存在");
}else{
return Result.succeed(user);
}
}
}
Solon 還可以這麼幹。正常的資料用返回,不正常的狀態用丟擲:
@Mapping("api/v1/demo")
@Controller
public class DemoController{
@Inject
UserService userService;
@Mapping("getUser")
public Result<User> getUser(long userId){
User user = userService.getUser(userId);
if(user == null){
//DataThrowable 可以把丟擲的資料,進行自常渲染
throw new DataThrowable().data(Result.failure(4001, "使用者不存在"));
}else{
return Result.succeed(user);
}
}
}
如果再增加 “統一的渲染控制” 改造輸出結構,還可以是這樣的效果:
@Mapping("api/v1/demo")
@Controller
public class DemoController{
@Inject
UserService userService;
@Mapping("getUser")
public User getUser(long userId){
User user = userService.getUser(userId);
if(user == null){
throw ApiCodes.CODE_4001; //CODE_4001 是一個異常例項
}else{
return user;
}
}
}