[Day 7]想不到有梗的标题LA(後端篇)

今天我们来看一下Native Camp用户设定,看一下有没有遗漏什麽栏位没有设置的,
https://ithelp.ithome.com.tw/upload/images/20210922/20140358plCRyZ0LWH.png
https://ithelp.ithome.com.tw/upload/images/20210922/20140358cZ58kKx0nD.png
这边可以看到可修改的栏位有

  • 图片
  • 昵称
  • 电子邮件
  • 密码
  • 时区
  • 支付方式
  • 电子报
  • 性别
  • 出生日期
  • 国籍
  • 居住地
  • 跟不公开的设定

果然根据可修改的资料,我们发现了有许多没有观察到的栏位需补充,生日电子报图片路径国籍居住地不公开设定
更新後的Users.java

package com.mock.nativecamp.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "Users")
@Data
@AllArgsConstructor
public class Users {
    @Id
    private String id;
    private String name;
    private String email;
    private String password;
    private String status;
    private String coin;
    private String timezone;
    private String payMethod;
    private String nextPayCheck;
    private String ssoId;
    private String gender;
    private String creditToken;
    private String profilePic;
    private boolean news;
    private String birthday;
    private String userNationality;
    private String userResidence;
    private boolean genderNotify;
    private boolean birthdayNotify;
    private boolean userNationalityNotify;
    private boolean userResidenceNotify;
}

我自己在今年开始写Spring时,会习惯去建立request以及response的Object class,这样在做栏位检查以及统一管理很方便,再加上使用lombok整个很清爽简单。
首先在payload资料夹中新增SignupReq.java

package com.mock.nativecamp.payload;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NonNull;

@Data
@AllArgsConstructor()
public class SignupReq {
    @NonNull
    private String name;
    @NonNull
    private String email;
    @NonNull
    private String password;
    @NonNull
    private String birthday;
    @NonNull
    private String gender;
    @NonNull
    private String credit_token;
}

然後将UsersController.java中的SignupUser @RequestBody改成SignupReq

@PostMapping(path = "/signup", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public Object SignupUser(@RequestBody SignupReq signupReq) throws Exception {
        return usersService.signupUser(signupReq);
    }

这样只要request没有带任何一个@NonNull则会有error

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of `com.mock.nativecamp.payload.SignupReq`, problem: gender is marked non-null but is null; nested exception is com.fasterxml.jackson.databind.exc.ValueInstantiationException: Cannot construct instance of `com.mock.nativecamp.payload.SignupReq`, problem: gender is marked non-null but is null
 at [Source: (PushbackInputStream); line: 6, column: 1]]

这边错误可以看到没有带gender,这样就可以对request data作保护,少带必要栏位可以直接抛错,这边只要去做error handler就可以很方便的去管理,还有如果多带其他不相关的栏位,因为Object没有宣告,所以会直接忽略。

今天完成了users的栏位遗漏检查以及新增了注册时的request检查,明天会继续在完善Users的各种CRUD。


<<:  D7 - 彭彭的课程#Python 有序列表的基本运算 - List、Tuple

>>:  Day 22. Hashicorp Vault: HTTP Status Codes

每个人都该学的30个Python技巧|番外篇:第31天但不是第31个技巧(字幕、衬乐)

今天是铁人赛的最後一天了(虽然我已经完赛了),这部影片也会是这系列的最後一部了,真的要结束了(´༎ຶ...

Day06 - Docker 简介,Container是什麽 ?

什麽是 Container ? 在了解 Container 之前,先来聊聊服务是如何建立的。传统服务...

RESTful API 在 Amazon Linux 2 上传图片实作-Day 07

RESTful API 在 Amazon Linux 2 上传图片实作-Day 07 RESTful...

Day8 资源指派与沟通管理

讲到这里,我脑海里就一句话想起来,冷淡熊的鬼扯蛋:兵分2999路。 基本上这是不行的,错误示范。专案...

Day 18 - 研习计画之工具评估与协作开发

开发框架 在昨日有提到负责後端的研习生的第一个功课是确定开发的框架,而在评估了一个月之後的考量对象包...