java http запрос Обязательный параметр String 'Username' отсутствует - PullRequest
0 голосов
/ 15 февраля 2020

У меня запущен весенний загрузочный сервер, который принимает http-запрос. Я тщательно протестировал его с помощью curl, и он отлично работает. Однако, когда я пытаюсь отправить запрос и получить ответ в java клиенте, я получаю:

java .io.IOException: сервер вернул код ответа HTTP: 400 для URL:

и на стороне сервера я получаю:

[org.springframework.web.bind.MissingServletRequestParameterException: обязательный строковый параметр 'Username' отсутствует]

Вот метод весенней загрузки, который я использую пытаюсь использовать:

@PostMapping(path="/CreateAccount") // Map ONLY POST Requests
  public @ResponseBody String CreateUser (@RequestParam String Username
                                        , @RequestParam String Password) {
    // @ResponseBody means the returned String is the response, not a view name
    // @RequestParam means it is a parameter from the GET or POST request
    //make sure the username and password is valid input
      if (!validateInput(Username) || !validateInput(Password))
      {
          return "Username and Password cannot be blank";
      }
    //make sure the username is unique
      //check if Username is equal to any other User's username
      User u = findByUsername(Username);
      //if a user was found in the table
      if ( !(u == null) )
      {
          return "Username already taken\nPlease choose another";
      }

      //if we are here we are clear to make a new user
    User n = new User();
    n.setUsername(Username);
    n.setPassword(Password);
    n.setRole("Player");
    userRepository.save(n);

    //THIS CAUSES AN ERROR
    //create a stat object to be added to the table
    Stats s = new Stats();
    s.setUsername(Username);
    statRepository.save(s);

    //create a token for the user
    String usrToken = createToken(tokenSize);
    //add the username and token to hashmap
    userTokens.put(Username, usrToken);

    //return this user's token
    return usrToken;
  }

А вот мой клиент:

public static void CreateAccount(String username, String password) 
    {
        try
        {
            String s = serverURL + "/CreateAccount";
            URL url = new URL(s);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setRequestMethod("POST"); 
            connection.setRequestProperty("Accept", "application/json");
            connection.setRequestProperty("Content-Type", "application/json; utf-8");
            connection.setDoOutput(true);

            String json = "[{\n\"Username\"=\"Jake\",\"Password\"=\"123\"\n}]";
            System.out.println(json);

            OutputStream os = connection.getOutputStream();
            DataOutputStream out = new DataOutputStream( os );
            byte[] input = json.getBytes("utf-8");

            out.writeUTF(json); 

            BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String response = br.readLine();
            System.out.println(response);


        } 
        catch (Exception e)
        {
            System.out.println("#");
            System.out.println(e);
        }
    }

Я думал, что это связано с моим json форматированием, но я пробовал снова и снова, и нет независимо от того, как я отформатирую его, я получаю ту же ошибку.

1 Ответ

0 голосов
/ 15 февраля 2020

Если вы хотите отправить json объект, используйте этот код, например:

@PostMapping(path="/CreateAccount")
public @ResponseBody String CreateUser (@RequestBody User user) {

    if (user == null)
    {
        return "User cannot be blank";
    }

    User u = findByUsername(user.Username);

    // your code...

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