Ошибка 400 при отправке запроса на сервер Spring - PullRequest
0 голосов
/ 09 июня 2019

Привет, я очень новичок в Swift и пытаюсь сделать простое приложение.

Я использую alamofire 5 beta 6 для запроса.

Вот код ниже

-код для отправки пост-запроса

 var json:JSON = JSON(["id":id.text, "password":enteredPassword])

    var parameters: Parameters = ["id":id.text, "password":enteredPassword]


    let headers:HTTPHeaders = [ "Content-Type":"application/json"]

    AF.request("http://127.0.0.1:8080/user", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).responseJSON{
        response in


        print("response : \(response)")
    }

-код для Spring Framework

    @RequestMapping(value="user", method=RequestMethod.POST)
    public JSONObject addUser(
            @RequestBody Memberinfo member,
            HttpServletRequest request) {


        JSONObject result = new JSONObject();

        return result;
    }

-Memberinfo.javaэто используется в контроллере для получения @ RequestBody

public class Memberinfo {

String id;
String password;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
}

В коде Swift я устанавливаю идентификатор параметра и пароль, чтобы получить его обратно в среде Spring.

Однако сразу после того, как я сделаю запрос, Alamofire отвечает сообщением

response : success({
error = "Bad Request";
message = "JSON parse error: Unrecognized token 'id': was expecting ('true', 'false' or 'null'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'id': was expecting ('true', 'false' or 'null')\n at [Source: (PushbackInputStream); line: 1, column: 4]";
path = "/user";
status = 400;
timestamp = "2019-06-09T05:46:07.417+0000";
})

1 Ответ

0 голосов
/ 09 июня 2019

Я думаю, что параметр должен быть отправлен следующим образом

var parameters: Parameters = {"id":id.text, "password":enteredPassword}

Еще одна важная вещь: вам не нужно иметь JSONObject в качестве типа ответа для вашей конечной точки, вы можете просто аннотировать свою конечную точку с помощью @ReponseBodyчтобы получить ответ json

@RequestMapping(value="user", method=RequestMethod.POST)
@ResponseBody
public ResponseEntity<JSONObject> addUser(
        @RequestBody Memberinfo member,
        HttpServletRequest request) {


    JSONObject result = new JSONObject();

    return result;
}

Всегда используйте что-то вроде Postman или RestClient для проверки вашей конечной точки перед вызовом этой конечной точки из внешнего источника

...