ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ
После многих испытаний со многими различными службами я подозреваю, что причиной заголовков является зависание.Возможно заголовок длины контента.Однако я понятия не имею, почему он так себя ведет.Мне очень нужны предложения.Я пытался с сервисами, которые возвращают меньше заголовков, и он не зависает.
У меня странная проблема.Я подключаюсь к другому сервису с помощью запроса GET, используя Resttemplate.Однако после отправки запроса, если я использую пользовательский POJO в качестве ResponseEntity, потребуется около 30 секунд, чтобы увидеть ответ.Если я отправил его, используя String в качестве ResponseEntity, он отвечает быстро (до 1 с).Мне было интересно, что может быть причиной этого.Формат ответа:
{
"data": [
{
"email": "eskaferas@gmail.com",
"firstName": "Seras",
"lastName": "Meras"
},
{
"email": "Soras@gmail.com",
"firstName": "Oras",
"lastName": "Moras"
},
{
"email": "bzbzb@gmail.com",
"firstName": "hello",
"lastName": "bye"
},
{
"email": "lrc@gmail.com",
"firstName": "Seras",
"lastName": "Meras"
}
],
"message": "Success"
}
Мой POJO:
public class ArrayResponsePojo {
private User[] data;
private String message;
public User[] getData() {
return data;
}
public void setData(User[] data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ArrayResponsePojo(){
}
}
Класс пользователя:
public class User {
private String email;
private String firstName;
private String lastName;
public User(){
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Метод get:
@GetMapping("/todos/{toDoNoteId}/users")
public ResponseEntity getNotesUsersTest(@PathVariable int toDoNoteId) {
ToDoNote note = toDoNoteService.getToDoNoteById(toDoNoteId);
if(note==null) {
throw new ToDoNoteNotFoundException("Note with id "+ toDoNoteId + " not found");
}
RestTemplate restTemplate = new RestTemplate();
final String uri = "http://friend:5000/users";
try {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>("parameters", requestHeaders);
ResponseEntity<ArrayResponsePojo> result = restTemplate.exchange(uri, HttpMethod.GET,entity, ArrayResponsePojo.class);
return result;
}
catch (HttpClientErrorException ex) {
return ResponseEntity.status(ex.getRawStatusCode()).headers(ex.getResponseHeaders())
.body(ex.getResponseBodyAsString());
}
}
Любые идеи приветствуются.Буду очень признателен за помощь.Ссылка на мою предыдущую проблему, возможно, она связана?Эта проблема решена, если бы не медленная скорость. Ошибка "Не удалось извлечь ответ: не найден подходящий HttpMessageConverter для типа ответа ... и типа содержимого [application / json]"
EDIT Я заметил, что этоочень быстро отвечает в браузере.Но я использую Почтальон и использую Почтальон, это очень медленно.Я действительно потерян в этот момент, так как не выдается никаких ошибок или чего-либо еще.
EDIT 2 Единственное, что я могу видеть из отладчика, это то, что он долго зависает на методеafterExecute (задача, брошенная);в классе java.util.concurrent.ThreadPoolExecutor.Это действительно расстраивает: (
РЕДАКТИРОВАТЬ 3 Я думаю, что это как-то связано с потоками, но запуск отладки во второй раз, когда он завис на другом методе в классе java.util.concurrent.LockSupportназывается
public static void park(Object blocker) {
Thread t = Thread.currentThread();
setBlocker(t, blocker);
UNSAFE.park(false, 0L);
setBlocker(t, null);
}
Но я не понимаю, что может быть не так, это займет около 30 секунд ... На самом деле это занимает целую минуту. И почему ответ работает нормально, если вы передаете String вместо моегопользовательский POJO в объекте ответа и restTemplate.
Еще один РЕДАКТИРОВАТЬ Я попытался получить ответ с помощью curl, и он получает заголовки, получает ответ, а затем просто зависает на минуту. Я неуверен, что может произойти в этот момент. Через минуту он выходит с сообщением «curl: (18) передача закрыта с 79 байтами, остающимися для чтения»
Уже пробовал установить тайм-ауты чтения и соединения не помогло, попытался соединитьсядля разных сервисов, которые отвечают разными типами POJO, он остается тем же.