Próbuję POSTOWAĆ obiekt na https://api.aftership.com/v4, ale mam problem poniżej:
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]
Mój kod źródłowy:
@Jednostka
@JsonIgnoreProperties(ignoreUnknown = true)
public class Trackings {
private String tracking_number;
public Trackings() {
}
public Trackings(String tracking_number) {
super();
this.tracking_number = tracking_number;
}
@NagłówekKonfiguracja
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;
}
}
@Funkcja do 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());
}
Mój wynik, który otrzymuję po wpisaniu http://localhost:8080/trackings/add to:
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
Próbowałem to rozwiązać. Pomóż mi to naprawić!!! <3
1
An Van Nguyen
24 listopad 2018, 19:47
Czy możesz zrobić Spring log, jaki JSON wysyła? Myślę, że wysyłasz niewłaściwy JSON.
– Robin Green
24 listopad 2018, 19:54
Jak mogę zdobyć dziennik wiosny? Przesyłam przedmiot.
– An Van Nguyen
24 listopad 2018, 19:59
Próbuję @PostMapping("/trackings/add") i otrzymuję "java.util.NoSuchElementException: Brak wartości"
– An Van Nguyen
24 listopad 2018, 20:01
Zobacz stackoverflow.com/questions/7952154/…
– Robin Green
24 listopad 2018, 20:01
Następnie możesz zmienić swoje mapowanie w taki sposób, jak to @RequestMapping(path="/trackings/add",method=RequestMethod.Post). masz źle skonfigurowane mapowanie
– lucid
24 listopad 2018, 20:03
1 odpowiedź
Najlepsza odpowiedź
[Aftership API][1] Musisz serializować obiekt JSON Trackings i dodać jego metody get i set:
@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;
}
}
I zaktualizuj na swoim kontrolerze:
@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());
}
0
Jonathan JOhx
24 listopad 2018, 22:20
1
Aftership API wymaga tylko parametru tracking_number, próbowałem go w aplikacji Postman!
– An Van Nguyen
24 listopad 2018, 20:44
Naprawdę utknąłem w tym gównie, nie rozumiem, dlaczego to nie działa :((
– An Van Nguyen
24 listopad 2018, 20:49
Zaktualizowałem to!! @AnVanNguyen, upewnij się, że poniższe rozważania, bracie!
– Jonathan JOhx
24 listopad 2018, 20:52
Dlaczego moja aplikacja Spring nie może dodać adnotacji @Entity?
– An Van Nguyen
24 listopad 2018, 21:02
Ponieważ nie masz zależności od JPA , jeśli dodasz zależność, możesz ją dodać.
– Jonathan JOhx
24 listopad 2018, 21:04
Podobne pytania
Powiązane pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].