春季启动时请求主体为空

时间:2021-05-13 21:11:38

标签: java typescript

我有一个带有帖子请求的资源,其中包含一个可以吸引用户成员的正文

 @PostMapping
    public void post(@RequestBody RestUserDTO restUserDTO) {
        try {
            registrationService.doRegistration(restUserDTO);
        } catch (BadEmailException | PasswordIsNotSecureException | BadUsernameException exception) {
            throw new ResponseStatusException(
                    HttpStatus.BAD_REQUEST, exception.getMessage(), exception);
        }
    }

Rest user DTO is a internal class that looks like this 

package com.wout.webresources.register;

import com.fasterxml.jackson.annotation.JsonProperty;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
@XmlType(name ="restUser" ,propOrder = {"firstName,lastName, userName,password, setPasswordConfirmation,email"})
public class RestUserDTO {

    @JsonProperty(value = "username")
    String username;

    @JsonProperty(value = "password")
    String password;

    @JsonProperty(value = "passwordConfirmation")
    String passwordConfirmation;

    @JsonProperty(value = "firstName")
    String firstName;

    @JsonProperty(value = "lastName")
    String lastName;

    @JsonProperty(value = "email")
    String email;


    @Override
    public String toString() {
        return super.toString();
    }

    public RestUserDTO() {
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }

    public String getPassword() {
        return password;
    }

    public String getUsername() {
        return username;
    }

    public String getPasswordConfirmation() {
        return passwordConfirmation;
    }


    public void setUsername(String username) {
        this.username = username;
    }


    public void setPassword(String password) {
        this.password = password;
    }

    public void setPasswordConfirmation(String passwordConfirmation) {
        this.passwordConfirmation = passwordConfirmation;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

此外,我有一个打字稿接口,以便在两个地方使用相同的成员

  singUp(){
    const _restUser:RestUserDTO= {}
    _restUser.username="admin";
    _restUser.password="password";
    _restUser.email = "email";
    _restUser.firstName = "firstName";
    _restUser.lastName = "lastName";
    _restUser.passwordConfirmation = "passwordConfirmation"

    this._service.singUp(_restUser)
    .subscribe(data =>console.log(data));
  }

我从邮递员和浏览器发出请求

enter image description here

但不知何故,来自服务器的对象的所有字段都为空

enter image description here

为什么会出现这个问题,我该如何解决

谢谢!

2 个答案:

答案 0 :(得分:0)

将端点 URI 添加到 @PostMapping 可能会有所帮助。我建议您从 IDE 本地调试/运行 Spring Boot 应用程序,设置断点,然后通过 curl 发送测试请求。这应该会引导您找到根本原因。

答案 1 :(得分:0)

大家好,同时发现这是由我的 Ts 类引起的,请求类似于 {RestUser:{ 用户名:用户名, 密码:密码....}} 必须非常小心请求的结构恰好是 1:1 并使用公共 setter 和 getter 谢谢