我提前为一个可能愚蠢的问题道歉,但是:
我有@Controller
我正在重做的@RestController
+ js。
这是其中一种方法:
@GetMapping
public ModelAndView showAll() {
ModelAndView mav = new ModelAndView("/departments");
List<DepartmentDto> departmentDtos = departmentService.findAll();
if (departmentDtos.isEmpty()) {
mav.setViewName("redirect:/api/departments/new");
} else {
mav.addObject("departmentDtos", departmentDtos);
}
return mav;
}
据我了解,控制器应如下所示:
@GetMapping
public ResponseEntity<List<DepartmentDto>> showAll() {
List<DepartmentDto> departmentDtos = departmentService.findAll();
return new ResponseEntity<>(departmentDtos, HttpStatus.OK);
}
在 JS 中,我返回这个对象,然后做我自己的逻辑。如果列表为空,我会重定向到另一个页面,等等。这是正确的?
附加问题:
方法
RestController
只返回一个对象?如果不是 - 如何返回 2 个或更多(例如,两个列表)?(我认为选项 c ModelAndView 不正确)如果您使用
RestController
- 重定向和转发的所有逻辑 - 将其留给 js 会更好吗?是否可以返回视图(jsp/html 等)
你想至少直接打开插座和锤进去不同,异端。
主要问题
是的,但最好使用包装器并在控制器中返回类似以下内容:
ResponseEntity
当您需要在响应中包含一些自定义标头或重新定义现有标头时很有用。如果你就这样使用它,那么总有一天你会被问到这个动作的含义:)第一个额外。问题
同样,如果您使用包装器,您可以返回至少十亿个字段:
端点将如下所示:
二加。问题
您可以在此处阅读有关重定向的信息:https ://stackoverflow.com/questions/36638150/best-approach-to-redirect-an-url-using-rest
第三个补充。问题
你可以这样尝试: