Я отправил правильное тело в формате JSON от Почтальона на мой Путь, но я получил ошибку 400 Bad Request - PullRequest
0 голосов
/ 06 февраля 2019

Я отправил правильное тело в формате JSON от Почтальона.

{
    "loginId": "xxxxxx",
    "password": "xxxxxx",
    "clientIP": "xxxxx",
    "companyId": "xxxxx"
}

Это мой контроллер

@RestController
@RequestMapping(path = "/umm")
   public class LoginServer {
       private transient Logger log = LogManager.getLogger(this.getClass());
       @RequestMapping(value = "/basicLogin",method = RequestMethod.POST)
       public @ResponseBody LoginRequest login(@RequestBody(required = true) LoginRequest loginRequest){
           return null; 
}

}

А это мой домен

public class LoginRequest implements Serializable {

    private static final long serialVersionUID = -884241731093688658L;
    private String loginId;
    private String password;
    private String clientIP;
    private String companyId;

    public LoginRequest(String loginId, String password, String clientIP, String companyId) {
        this.loginId = loginId;
        this.password = password;
        this.clientIP = clientIP;
        this.companyId = companyId;
    }

//getter and setter omitted

}

Я не знаю, почему он возвращает мне код ошибки 400 (неверный запрос), потому что я отправил правильное тело JSON

Это ответное сообщение.

{
    "timestamp": 1549458416991,
    "status": 400,
    "error": "Bad Request",
    "exception": "org.springframework.http.converter.HttpMessageNotReadableException",
    "message": "JSON parse error: Can not construct instance of escf.api.domain.login.LoginRequest: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of escf.api.domain.login.LoginRequest: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)\n at [Source: java.io.PushbackInputStream@1c360a55; line: 2, column: 2]",
    "path": "/umm/basicLogin"
}

Мне нужноверните мне код 200.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Учитывая, что вы используете Джексона для сериализации / десериализации вместо Gson, следующее решение должно работать для вас.

public class LoginRequest implements Serializable {

    private static final long serialVersionUID = -884241731093688658L;
    private String loginId;
    private String password;
    private String clientIP;
    private String companyId;

    @JsonCreator
    public LoginRequest(@JsonProperty("loginId") String loginId, @JsonProperty("password") String password, @JsonProperty("clientIP") String clientIP, @JsonProperty("companyId") String companyId) {
        this.setLoginId(loginId);
        this.setPassword(password);
        this.setClientIP(clientIP);
        this.setCompanyId(companyId);
    }

// Define your getters and setters IMPORTANT

}

Ресурсы: https://www.baeldung.com/jackson-annotations

0 голосов
/ 06 февраля 2019

добавить супер ();в доменном классе это работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...