#java #angular #spring-boot #httpclient #angular7
#java #угловой #весенняя загрузка #httpclient #angular7
Вопрос:
Мои среды:
- Магазин RestController: весенняя загрузка
- на локальном хосте laptopn ubuntu 18:04
- ShopService: угловой HttpClient
- на настольном ПК с локальным хостом Windows 10
Проблема:
Мой запрос get через HttpClient получил ответ null. Но если я использую postman или в браузере, я получил ожидаемое тело ответа.
Угловой код:
const BASE_URL = 'http://pc01:8081/shopsystem/shops';
const SHOP_NAME = 'Muster Shop';
@Injectable({
providedIn: 'root'
})
export class ShopService {
shop$: Shop;
address$: Address;
owner$: Owner;
//header = new HttpHeaders({ 'Content-Type': 'application/json' });
constructor(private http: HttpClient) { }
public getShop(): Observable<Shop>{
return this.http.get<Shop>(BASE_URL '/' SHOP_NAME);
}
Заголовок ответа:
Ответ:
Запрос на postman:
Контроллер загрузки Spring:
Я уже пробовал использовать Observable с any и HttpHeaders с application / json, но тот же ответ.
Другое дело: если мой контроллер загрузки Spring возвращает список, я получаю тело ответа с содержимым.
Вопрос:
Почему я получил нулевое или пустое тело в моем запросе HttpClient?
Как я могу это решить?
Спасибо
Комментарии:
1. покажите свой метод Get в контроллере загрузки spring
2. Спасибо за быстрый ответ. Я отредактировал свой вопрос с помощью контроллера загрузки spring
3. Вы пытались настроить его без пробела в uri? Измените
muster shop
наmusterShop
и посмотрите, получаете ли вы все еще значение null4. Я получил 404, как и ожидалось от серверной части. URL-адрес запроса: pc01:8081/shopsystem/shops/MusterShop Метод запроса: ПОЛУЧИТЬ код состояния: 404
5. Я полагаю, что это ваш аддон, который все усложняет. Выключите его и посмотрите, что произойдет. Запустите приложения на том же компьютере и посмотрите, что произойдет. Правильно включите Cors при загрузке spring и посмотрите, что произойдет. Похоже, вам нужно выполнить некоторую отладку.
Ответ №1:
Ваш Angular HttpClient кодирует пробел в переменной path, поэтому он поступает в RestController как Muster Shop .
Затем вы пытаетесь найти запись с таким точным именем, которого не существует.
Вы должны декодировать @PathVariable
, прежде чем отправлять его в свой запрос в качестве сборщика.
Комментарии:
1. Но Spring Boot декодирует его автоматически, я вижу это в своем журнале загрузки spring. Если мой запрос от HttpClient достигает моей весенней загрузки, он вызывает ожидаемую службу и возвращает ожидаемый ответ.
Ответ №2:
добавьте аннотацию @CrossOrigin в свой класс контроллера
@CrossOrigin
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1")
public class UserController {
private final FileStorageService fileStorageService;
private final GameService service;
@GetMapping("{id}")
public GameDTO getUserbyID(@PathVariable Long id) {
log.info("get {} at {}", service.getUserbyID(id), Calendar.getInstance().getTime());
return service.getUserbyID(id);
}
Комментарии:
1. Более подробный ответ включал бы пример кода с рекомендуемым исправлением.