Springboot前后端分离的RestController有无较优雅的302方案?

就是前端请求一个RESTful接口,如果该接口业务异常,那就是返回的时候JSON数据。
如果业务正常,需要自动302到一个外部页面。

目前有两个解决方案:
1.业务正常也返回JSON,Status200,把302的URL带在JSON里由前端处理
2.操作RestController中请求的response,手动写入HttpStatus和相关URL,剩下的由前端自己来

有无更加优雅的解决方案?或者两种方案哪种更优雅

也许你可以试试看这样。返回ModelAndView完成重定向,返回 ResponseEntity 响应JSON。

    @GetMapping("/test")
    public Object test () {
    	
    	boolean ret = false;
    	
    	if (ret) {
    		// 执行成功,重定向
    		return new ModelAndView("redirect:https://springboot.io");
    	} 
    	
    	// 执行异常,响应JSON
    	return ResponseEntity
    			.status(HttpStatus.BAD_REQUEST)
    			.body(Collections.singletonMap("success", false));
    	
    }
1 Like

i will 康康

第一种合理吧 起码知道异常 可以自己选择性redirect 而且接口数据格式统一好点

2 Likes
return new ModelAndView("redirect:https://springboot.io");

return ResponseEntity
    .status(HttpStatus.FOUND)
    .location(URI.create("https://springboot.io"))
    .body(/*some object*/);

尝试了一下,这两种方法都不错

个人建议第二种,因为如果前端拦截到的话也可以根据内容做一些额外处理

2 Likes