HTTP POST от Java с проблемой JSON - PullRequest
0 голосов
/ 27 марта 2020

Может ли кто-нибудь посоветовать, почему этот код не будет работать для сообщения HTTP с JSON? Никакого ответа не получено.

Я использую Java в Android Studio - использую эмулятор на моем ноутбуке и хочу получить доступ к localhost на моем ноутбуке (так, используя 10.0.2.2). Затем хотите получить ответ JSON, установить его в виде строки, чтобы проверить, что я получаю ответ.

    String jsonResponse = "No response received";

    try {
        //where write JSON with account details etc
        JSONObject json = new JSONObject();
        json.put("accountID", "test");

        URL url = new URL("http://10.0.2.2:8082/queryTransaction");
        HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
        httpcon.setDoOutput(true);
        httpcon.setRequestMethod("POST");
        httpcon.setRequestProperty("Accept", "application/json");
        httpcon.setRequestProperty("Content-Type", "application/json");
        httpcon.setRequestProperty("Accept", "application/json");

        OutputStreamWriter output = new OutputStreamWriter(httpcon.getOutputStream());
        output.write(json.toString());
        httpcon.connect();
        jsonResponse = httpcon.getResponseMessage();//json response from API


    }catch(Exception e){

    }

Редактировать: я получаю эту ошибку, которую я сейчас нашел ... Метод бросил ' java .lang.NullPointerException 'исключение. Невозможно оценить com. android .okhttp.HttpUrl $ Builder.toString ()

1 Ответ

0 голосов
/ 27 марта 2020

так что есть несколько предостережений с этим. Я получил это после нескольких изменений.

  1. Обязательно установите кодировку.
setRequestProperty("charset", "utf-8");
Не оборачивайте OutputStream, помещайте его в попытку с ресурсами и пишите json в виде байтового массива как utf-8, поскольку это то, что мы принимаем.
try (OutputStream output = httpcon.getOutputStream()) {
    output.write(json.toString().getBytes(StandardCharsets.UTF_8));
}
Убедитесь, что ваш Json объект правильный. Если вы собираетесь использовать accountID, убедитесь, что вы используете его правильно. Например, Gson / Jackson не сможет проанализировать это, поскольку обычно он принимает account_id или accountId. При необходимости используйте @JsonProperty.
@JsonProperty("account_id")
private final String accountId;

Пример контроллера с пружинной загрузкой

@RestController
public class TestPostController {

    public static class Account {

        @JsonProperty("account_id")
        private final String accountId;

        public Account(String accountId) {
            this.accountId = accountId;
        }

        public Account() {
            this(null);
        }

        public String getAccountId() {
            return accountId;
        }
    }
    @PostMapping(path = "/test-post", consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    public ResponseEntity<Account> response(@RequestBody Account account) {
        return ResponseEntity.ok(account);
    }

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