Как перенаправить на новый домен (url) с помощью Spring Boot?

Я создаю сокращатель ссылок, используя весеннюю загрузку. Все работает, кроме перенаправления пользователя на его URL-адрес. Я проверил другой пример на stackoverflow, но у меня ничего не работает.

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

public class DosuController {

    private final DosuService dosuService;

    public DosuController(DosuService dosuService) {
        this.dosuService = dosuService;
    }

    @GetMapping("/{dosu}")
    public ResponseEntity<Void> redirect(@PathVariable("dosu") String dosu) {
        return dosuService.redirect(dosu);
    }
}
//SERVICE
public class DosuService {

    private final DosuRepo dosuRepo;

    public DosuService(DosuRepo dosuRepo) {
        this.dosuRepo = dosuRepo;
    }

    public ResponseEntity<Void> redirect(String dosu) {
        Dosu dosus = dosuRepo.findByDosu(dosu);
        if (dosus == null) {
            throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Dosu not found with name: +"dosu);
        }

        return ResponseEntity.status(HttpStatus.FOUND)
            .location(URI.create(dosus.getRedirectUrl())
            .build();
    }
}


Вывод: локальный: 8080/www.google.com

Результат желания: www.google.com

попробуйте вернуть 30-кратный код состояния http, чтобы разрешить перенаправление браузера. @ Максвелл Д. Дорлиа careydevelopment.us/blog/spring-boot-how-to-do-a-301-redirect‌​t

Dolphin 23.04.2022 03:35

@Dolphin Я все еще получаю тот же результат

Maxwell D. Dorliea 23.04.2022 03:47

не могли бы вы вставить http-ответ о запросе? @ Максвелл Д. Дорлиа, вы видели код состояния http перенаправления 30x?

Dolphin 23.04.2022 03:50
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
3
72
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны сначала проверить свой dosus.getRedirectUrl(). это фактический URL, что вы ожидаете?

Затем проведите рефакторинг кода и попробуйте вернуть redirect:url с вашего контроллера.

Контроллер:

@GetMapping("/{dosu}")
public String redirect(@PathVariable("dosu") String dosu) {
    Dosu dosus = dosuService.findByDosu(dosu);
    if (dosus == null) {
        throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Dosu not found with name: " + dosu);
    }
    return "redirect:" + dosus.getRedirectUrl();
}

Услуга:

public Dosu findByDosu(String dosu) {
    return dosuRepo.findByDosu(dosu);
}

Я все еще получаю тот же результат

Maxwell D. Dorliea 23.04.2022 05:15

Что произойдет, если вы return "redirect:https://www.google.com" ? Правильно ли это приводит вас на главную страницу Google?

Kai-Sheng Yang 23.04.2022 05:50

Он перенаправляет на localhost: 8080/www.google.com

Maxwell D. Dorliea 23.04.2022 10:10
Ответ принят как подходящий

Вы можете установить URI в заголовках местоположения, как описано в следующем фрагменте кода. Убедитесь, что вы добавили правильный URI SCHEME (например, https, упомянутый в uri). Бывший:

  public ResponseEntity<Void> redirect() {
    HttpHeaders headers = new HttpHeaders();
    headers.setLocation(URI.create("https://www.google.com"));
    return new ResponseEntity<>(headers, HttpStatus.MOVED_PERMANENTLY);
  }

Обновленный метод класса обслуживания

public ResponseEntity<Void> redirect(String dosu){
 Dosu dosus = dosuRepo.findByDosu(dosu);
 if(dosus == null){
  throw new ResponseStatusException (HttpStatus.NOT_FOUND,"Dosu not found with name: +"dosu);
 }
 HttpHeaders headers = new HttpHeaders();

 // Make sure uri should be valid uri with proper scheme name

 headers.setLocation(URI.create(dosus.getRedirectUrl()));
 return new ResponseEntity<>(headers, HttpStatus.MOVED_PERMANENTLY);
}

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