如何在 Spring Boot 中制作可以重定向到 url 的 REST api

Posted

技术标签:

【中文标题】如何在 Spring Boot 中制作可以重定向到 url 的 REST api【英文标题】:How to make REST api that can redirect to url in SpringBoot 【发布时间】:2021-08-08 19:51:45 【问题描述】:

我创建了一个 REST api,它可以用来保存不同的 url,这些 url 具有自动递增功能,可以为它们分配一个 id,一个端点是添加 url,另一个是从 id 获取 url 我想做一些事情,如果我通过 localhost:8080/getUrlById?id=4/ 我的浏览器应该将我重定向到第 4 号的那个 url。

我的控制器代码 -

@GetMapping("/addUrl")
public ResponseEntity<?> addUrlByGet(String url) 
    return new ResponseEntity<>(sortnerService.addUrlByGet(url),HttpStatus.OK);



@GetMapping("/findUrlById")
    public ResponseEntity<?> findSortnerById(Integer id)
    return new ResponseEntity<>(sortnerService.findUrlById(id), HttpStatus.OK);

服务类-

@Service
public class SortnerService 
    @Autowired
    private  SortnerRepo sortnerRepo;

    public Sortner addUrlByGet(String url) 
        Sortner sortner = new Sortner();
        sortner.setUrl(url);
        return  sortnerRepo.save(sortner);
    

//   finding by particular Id

   public List<Sortner> findUrlById(Integer id)
        return sortnerRepo.findSortnerById(id);
   

任何人都可以建议我任何方法吗?我对 SpringBoot 真的很陌生,如果我犯了任何愚蠢的错误,请原谅。

【问题讨论】:

这能回答你的问题吗? Spring MVC @RestController and redirect 是的,我正在研究这个,但这里的大多数答案只是重定向到一些静态 url,而不是来自客户端选择的 id。 @VadymVL 你能建议我一些方法如何重定向到数据库中存在的特定链接,只要用户在 id=1 处请求 url 相应的 url 应该重定向我希望你是明白我的意思! Sortner 类是什么?您需要将 Sortner 类转换为 URL Sortner 只是一个奇怪的名字(也许它意味着一些 idk)它的模型类包含两个私有变量 id 是自动增量和 url 来设置和获取 url 、 getter 和 setter 什么都没有,跨度> 【参考方案1】:

根据来自 cmets 的信息,我建议 Sortner 类看起来像这样:

  public class Sortner 
    Long id;
    URL url;
  

因此,要通过服务中的 Id 重定向到 URL,您需要将控制器重写为如下所示:

  @GetMapping("/findUrlById")
  public void findSortnerById(Integer id, HttpServletResponse response) throws IOException 
    List<Sortner> urls = sortnerService.findUrlById(id);
    if(urls != null && urls.size() > 0) 
        response.sendRedirect(urls.get(0).getUrl().toString());
    
    response.sendError(HttpServletResponse.SC_NOT_FOUND)
  
response.sendRedirect 重定向到所需的 URL response.sendError 在数据库中找不到 URL,返回 404

【讨论】:

非常感谢,我想现在我知道这是如何工作的了,这真的意味着很多:D 最后一件事,它的 url 只是附加了我的应用程序 url,比如 - localhost:8080/google。 com 有什么解决办法吗 :) 抱歉问太多了 再次感谢 为了防止附加到您的应用程序 URL,如 - localhost:8080/google.com,您需要确保您要重定向的 URL 具有架构部分 http://https://。如果 t 没有,则需要在调用 sendRedirect 之前手动添加。例如response.sendRedirect("https://google.com"); 如果您从浏览器调用此 API 作为文档,重定向将起作用。但是,如果此 GET API 调用来自 javascript,则重定向将不起作用。

以上是关于如何在 Spring Boot 中制作可以重定向到 url 的 REST api的主要内容,如果未能解决你的问题,请参考以下文章

spring boot 重定向到页面登录

(spring-boot) http 到 https 重定向,405 方法不允许消息

在 Google 前端负载均衡器后面运行时如何正确从 Spring Boot 2.3 重定向到 HTTPS

为啥 Spring Boot 不会重定向到 403 上的 Keycloak 登录页面?

Spring Boot 将 HTTP 重定向到 HTTPS

如何处理 Spring Boot 重定向到 /error?