问题
工作中场景需要通过获取url地址内容,展示返回给客户端,但上线后发现不满足需求,原因是url地址进行302重定向,
进一步了解是因为HttpUtil.get方法不能获取重定向地址,需要使用HttpUtil.createGet()来设置打开重定;
理解302:
302 表示临时性重定向,访问一个Url时,被重定向到另一个url上;常用于页面跳转。
302与301的区别:
301是指永久性的移动,302是暂时性的,即以后还可能有变化;
其它重定向方式:
在响应头中加入Location参数。浏览器接受到带有location头的响应时,就会跳转到相应的地址。
Spring实现302的几种方式:
1、使用RedirectView实现重定向
@GetMapping("/redirect/v1")
public RedirectView redirectV1() {
//创建RedirectView对象并设置目标URL
RedirectView view = new RedirectView();
//view.setUrl("https://www.baidu.com");
view.setUrl("/springboot/redirect/index");
Properties properties = new Properties();
properties.setProperty("name", "make");
view.setAttributes(properties);
return view;
}
2、HttpServletResponse重定向
通过HttpServletResponse往输出流中写数据的方式,来返回结果, 实现重定向
@ResponseBody
@GetMapping("/redirect/v2")
public void redirectV2(HttpServletResponse response) throws IOException {
response.sendRedirect("https://www.sina.com.cn");
}
3、通过redirect关键词
常适用于返回视图的接口,在返回的字符串前面添加redirect:方式来告诉Spring框架,需要做302重定向处理;文章来源:https://www.toymoban.com/news/detail-788940.html
@ResponseBody
@GetMapping("/redirect/v3")
public String redirectV3() throws IOException {
return "redirect:/redirect/index?base=r1";
}
完整测试:文章来源地址https://www.toymoban.com/news/detail-788940.html
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.view.RedirectView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.io.IOException;
import java.util.Properties;
@Controller
public class RedirectController {
/**
* 使用RedirectView实现重定向
*/
@GetMapping("/redirect/v1")
public RedirectView redirectV1() {
//创建RedirectView对象并设置目标URL
RedirectView view = new RedirectView();
//view.setUrl("https://www.baidu.com");
view.setUrl("/springboot/redirect/index");
Properties properties = new Properties();
properties.setProperty("name", "make");
view.setAttributes(properties);
return view;
}
/**
* HttpServletResponse重定向
* 通过HttpServletResponse往输出流中写数据的方式,来返回结果, 实现重定向
*/
@ResponseBody
@GetMapping("/redirect/v2")
public void redirectV2(HttpServletResponse response) throws IOException {
response.sendRedirect("https://www.sina.com.cn");
}
/**
* 返回redirect
* 常适用于返回视图的接口,在返回的字符串前面添加redirect:方式来告诉Spring框架,需要做302重定向处理;
*/
@ResponseBody
@GetMapping("/redirect/v3")
public String redirectV3() throws IOException {
return "redirect:/redirect/index?base=r1";
}
@ResponseBody
@GetMapping(path = "/redirect/index")
public String index(HttpServletRequest request) {
return "重定向访问! " + JSON.toJSONString(request.getParameterMap());
}
}
到了这里,关于cn.hutool.http.HttpUtil类get方法不支持获取重定向地址(避坑)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!