Java 如何在SpringBoot中创建可以重定向到url的RESTAPI

Java 如何在SpringBoot中创建可以重定向到url的RESTAPI,java,spring,spring-boot,maven,Java,Spring,Spring Boot,Maven,我已经创建了一个RESTAPI,它可以用来保存不同的url,这些url具有自动递增功能,可以为它们分配一个id一个端点是添加url,另一个端点是从id获取url 我想做一些类似的事情,如果我传递localhost:8080/getUrlById?id=4/我的浏览器应该将我重定向到第四个位置的url 我的控制器代码- @GetMapping("/addUrl") public ResponseEntity<?> addUrlByGet(String url) {

我已经创建了一个RESTAPI,它可以用来保存不同的url,这些url具有自动递增功能,可以为它们分配一个id一个端点是添加url,另一个端点是从id获取url 我想做一些类似的事情,如果我传递localhost:8080/getUrlById?id=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);
}
@GetMapping(“/addUrl”)
public ResponseEntity addUrlByGet(字符串url){
返回新的ResponseEntity(sortnerService.addUrlByGet(url),HttpStatus.OK);
}
@GetMapping(“/findUrlById”)
公共响应findSortnerById(整数id){
返回新的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);
   }
}
@服务
公共类排序服务{
@自动连线
私人索特内雷波索特内雷波;
公共排序器addUrlByGet(字符串url){
Sortner Sortner=新的Sortner();
setUrl(url);
返回sortnerRepo.save(sortner);
}
//按特定Id查找
公共列表findUrlById(整数id){
返回sortnerRepo.findSortnerById(id);
}
}

有人能给我建议什么方法吗我对SpringBoot很陌生,如果我犯了什么愚蠢的错误,很抱歉。

根据评论中的信息,我建议
Sortner
类如下:

  public class Sortner {
    Long id;
    URL 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)
  }
因此,要通过服务的Id重定向到URL,您需要重写控制器,如下所示:

  public class Sortner {
    Long id;
    URL 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)
  }
@GetMapping(“/findUrlById”)
public void findSortnerById(整数id,HttpServletResponse)引发IOException{
List url=sortnerService.findUrlById(id);
如果(URL!=null&&URL.size()>0){
response.sendRedirect(url.get(0.getUrl().toString());
}
response.sendError(未找到HttpServletResponse.SC)
}
  • 重定向到所需的URL
  • 返回404,因为在数据库中找不到URL

根据评论中的信息,我建议
Sortner
类如下所示:

  public class Sortner {
    Long id;
    URL 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)
  }
因此,要通过服务的Id重定向到URL,您需要重写控制器,如下所示:

  public class Sortner {
    Long id;
    URL 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)
  }
@GetMapping(“/findUrlById”)
public void findSortnerById(整数id,HttpServletResponse)引发IOException{
List url=sortnerService.findUrlById(id);
如果(URL!=null&&URL.size()>0){
response.sendRedirect(url.get(0.getUrl().toString());
}
response.sendError(未找到HttpServletResponse.SC)
}
  • 重定向到所需的URL
  • 返回404,因为在数据库中找不到URL

这是否回答了您的问题?是的,我一直在研究这个问题,但这里的大多数答案只是重定向到某个静态url,而不是从客户端选择的id。@VadymVL您能告诉我一些方法,如何重定向到数据库中存在的特定链接,只要用户问到id=1的url,相应的url应该重定向,我希望您能理解我的观点!什么是
Sortner
类?您需要将您的Sortner类转换为URLSortner什么都不是只是一个奇怪的名称(也许它意味着idk)其模型类包含两个私有变量id,即autoincrement和url,用于设置和获取url、getter和Setter,什么都没有,这是否回答了您的问题?是的,我一直在研究这个问题,但这里的大多数答案只是重定向到某个静态url,而不是从客户端选择的id。@VadymVL您能告诉我一些方法,如何重定向到数据库中存在的特定链接,只要用户问到id=1的url,相应的url应该重定向,我希望您能理解我的观点!什么是
Sortner
类?您需要将Sortner类转换为URLSortner什么都不是只是一个奇怪的名称(也许它意味着idk)它的模型类包含两个私有变量id,即autoincrement和url,用于设置和获取url、getter和Setter,什么都没有,非常感谢,我想现在我知道了这是如何工作的,这真的意味着很多:D最后一件事,它的url只是附加了我的应用程序url,比如-localhost:8080/google.com有什么解决方案吗:)对不起,我要问太多的感谢,防止附加到你的应用程序url,比如-
localhost:8080/google.com
,您需要确保重定向的URL具有架构部分
http://
https://
。如果没有,则需要在调用
sendRedirect
之前手动添加它。例如
response.sendRedirect(“https://google.com");如果从浏览器将此API作为文档调用,则重定向将起作用。但是,如果这个GET-API调用来自Javascript,重定向将不起作用。非常感谢,我想现在我知道了它的工作原理,这真的意味着很多:D最后一件事,它的url只是附加了我的应用程序url,比如-localhost:8080/google.com有什么解决方案吗:)对不起,我要问太多的感谢,防止附加到你的应用程序url,比如-
localhost:8080/google.com
,您需要确保重定向的URL具有架构部分
http://
https://
。如果没有,则需要在调用
sendRedirect
之前手动添加它。例如
response.sendRedirect(“https://google.com");如果从浏览器将此API作为文档调用,则重定向将起作用。但是,如果这个GET-API调用来自Javascript,那么重定向将不起作用。