SpringFramework HttpClientErrorException 400 Плохой запрос, как выполнить POST на стороне Java?

Я пытаюсь отправить объект в https://api.aftership.com/v4, но у меня возникла проблема:

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request
at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:79) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:97) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:79) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:777) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:735) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:669) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:578) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at api.aftership.tracking.TrackingController.addTracking(TrackingController.java:70) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]

Мой исходный код:

@Организация

@JsonIgnoreProperties(ignoreUnknown = true)
public class Trackings {
private String tracking_number;
public Trackings() {

}
public Trackings(String tracking_number) {
    super();
    this.tracking_number = tracking_number;
}

@HeaderConfig

public class HttpHeaderConfigs {
private static final HttpHeaders headers = new HttpHeaders();

public HttpHeaderConfigs() {

}

public static HttpHeaders HttpHeaderConfig() {
    headers.set("aftership-api-key", "e7f28250-889d-48ce-80a1-52f4d16XXXX");
    headers.setContentType(MediaType.APPLICATION_JSON);
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    return headers;
}

public HttpHeaders getHeaders() {
    return headers;
}
}

@ Функция для POST

@RequestMapping("/trackings/add")
public void addTracking() {
    final String uri = "https://api.aftership.com/v4/trackings";
    Trackings tracking = new Trackings();
    tracking.setTracking_number("783518514479");
    RestTemplate restTemplate = new RestTemplate();
    HttpEntity<Trackings> entity = new HttpEntity<Trackings>(tracking, HttpHeaderConfig());
    ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.POST, entity, String.class);
    System.out.println(response.getBody());
}

И мой результат, который я получаю при вводе http: // локальный: 8080 / отслеживание / добавить:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sat Nov 24 23:20:59 ICT 2018
There was an unexpected error (type=Internal Server Error, status=500).
400 Bad Request

Я пытался это решить. Пожалуйста, помогите мне это исправить !!! <3

Можете ли вы сделать журнал Spring, какой JSON он отправляет? Я думаю, вы отправляете неправильный JSON.

Robin Green 24.11.2018 17:54

Как я могу получить журнал Spring? Отправляю по объекту.

An Van Nguyen 24.11.2018 17:59

Я пробую @PostMapping ("/ trackings / add") и получаю "java.util.NoSuchElementException: значение отсутствует"

An Van Nguyen 24.11.2018 18:01

См. stackoverflow.com/questions/7952154/…

Robin Green 24.11.2018 18:01

Затем вы можете изменить свое отображение примерно так: @RequestMapping (path = "/ trackings / add", method = RequestMethod.P‌ ost). у вас неправильно настроено отображение

lucid 24.11.2018 18:03

@PostMapping доступен начиная с Spring 4.3 и далее, поэтому, если вы хотите использовать пост-маппинг, обновите свою весеннюю версию до 4.3. + Или вы можете просто использовать предложенный подход lucid, например @RequestMapping (path = "/ trackings / add", method = RequestMethod. P‌ ost)

Praveen Mulchandani 24.11.2018 18:09

@RequestMapping (path = "/ trackings / add", method = RequestMethod.P‌ ost) return Нет значения

An Van Nguyen 24.11.2018 18:15

Я использовал LoggingRequestInterceptor (), на который ссылается Робин, и я получил эту «ошибку ввода-вывода при запросе POST для« api.aftership.com/v4/trackings »: сервер вернул код ответа HTTP: 400 для URL: api.aftership.com/v4/trackings; вложенное исключение - java.io.IOException: сервер вернулся Код ответа HTTP: 400 для URL: api.aftership.com/v4/trackings "

An Van Nguyen 24.11.2018 18:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
7 623
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

[Aftership API] [1] Вам необходимо сериализовать объект Trackings JSON и добавить его методы получения и установки:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MainTracking implements Serializable {

    private Tracking Tracking;

    public String getTracking() {
        return tracking;
    }

    public void setTracking(Tracking tracking) {
        this.tracking = tracking;
    }
}



@JsonIgnoreProperties(ignoreUnknown = true)
public class Tracking implements Serializable {

    private String tracking_number;

    public Tracking() {
    }    

    public Tracking(String tracking_number) {
        setTracking_number(tracking_number);
    }    

    public String getTracking_number() {
        return tracking_number;
    }

    public void setTracking_number(String tracking_number) {
        this.tracking_number = tracking_number;
    }
}

И обновите свой контроллер:

@RequestMapping("/trackings/add")
public void addTracking() {
    final String uri = "https://api.aftership.com/v4/trackings";
    MainTracking mainTracking = new MainTracking();
    Tracking tracking = new Tracking();
    tracking.setTracking_number("7835112328"); // Be careful with     this number has generated different every time.!!
    mainTracking.setTracking(tracking);

    RestTemplate restTemplate = new RestTemplate();
    HttpEntity<MainTracking> entity = new HttpEntity<MainTracking>(mainTracking, HttpHeaderConfig());

    ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.POST, entity, String.class);
    System.out.println(response.getBody());
 }

Aftership API просто требует параметра tracking_number, я пробовал его в приложении Postman!

An Van Nguyen 24.11.2018 18:44

Я действительно застрял на этом дерьме, не понимаю, почему не работает: ((

An Van Nguyen 24.11.2018 18:49

Обновил !! @AnVanNguyen, пожалуйста, убедитесь, что у вас есть следующие соображения, братан!

Jonathan JOhx 24.11.2018 18:52

Почему мое приложение Spring не может добавить аннотацию @Entity?

An Van Nguyen 24.11.2018 19:02

поскольку у вас нет зависимости от JPA, если вы добавите зависимость, вы можете ее добавить.

Jonathan JOhx 24.11.2018 19:04

Привет, братан @AnVanNguyen, я сделал тест, и он работает. вы забыли добавить его в объект ... я обновил его своим ответом!

Jonathan JOhx 24.11.2018 19:07

Пожалуйста, проверьте взгляд

Jonathan JOhx 24.11.2018 19:09

Могу я получить ваш код на гитхабе? Я новичок в API: ((

An Van Nguyen 24.11.2018 19:10

Конечно, но вам нужно поделиться своим репозиторием, поэтому я собираюсь его обновить :) @AnVanNguyen

Jonathan JOhx 24.11.2018 19:14

Оки, давай сделаем это. Пожалуйста, дайте мне ссылку на github

An Van Nguyen 24.11.2018 19:17

Вы тестировали мое приложение? @ jonathan-johx

An Van Nguyen 24.11.2018 19:43

Да, я сделал. позволь мне проверить. @ AnVanNguyen

Jonathan JOhx 24.11.2018 19:52

done @AnVanNguyen Надеюсь, мой ответ отмечен как решение.

Jonathan JOhx 24.11.2018 20:19

@AnVanNguyen Я сделал запрос на перенос вашего репо с моими изменениями. С уважением ..: V просто проголосовать :)

Jonathan JOhx 24.11.2018 20:23

Вот дерьмо, ты это исправишь! Просто нужно изменить tracking_number, и все заработает! Большое спасибо братан !!!!

An Van Nguyen 24.11.2018 20:48

Привет, Johx @ jonathan-johx, мне действительно нужна ваша помощь, после решения метода POST я что-то делаю с PUT httpmethod, но он возвращает те же ошибки. Я пробовал что угодно, но не могу, проверьте мой код в github. Большое спасибо, братан!

An Van Nguyen 29.11.2018 13:07

@AnVanNguyen Хорошо, попробую посмотреть позже

Jonathan JOhx 29.11.2018 16:02

Ты спас мне день !!

An Van Nguyen 29.11.2018 18:05

@AnVanNguyen Извините, я не смогу помочь сегодня, выходные, я так думаю ...

Jonathan JOhx 29.11.2018 23:24

Другие вопросы по теме