我想通过JSON API管理用户项目,并且我想使用相对路径控制器。像这样:
@RequestMapping(value="/users/{userId}/projects",
headers="Accept=application/json")
@Controller
public class UserProjectsController {
@Autowired
private UserRepository userRepository;
@RequestMapping(method=RequestMethod.GET)
public @ResponseBody Object getAllUserProjects(@PathVariable String userId) {
User user = userRepository.findById(userId);
if (user == null) {
return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
}
return user.getGivenProjects();
}
}
我会添加许多方法,每次我都要检查用户是否存在。而不是添加那段代码:
User user = userRepository.findById(userId);
if (user == null) {
return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
}
...在每个方法开始时,我想创建一个自定义注释,如果用户不存在,将返回404。
我发现this tutorial要做到这一点。这真的和描述的一样复杂吗?你知道其他任何解决方案吗? (我想避免编写2个类和超过50行代码来注释4行。)
谢谢。
答案 0 :(得分:3)
我首先假设这项检查与安全无关,是吗?
我认为WebArgumentResolver不符合您的需求。返回404状态可能很复杂。
也许自定义interceptor可以是更好的解决方案。每次向控制器发出请求时都会调用它。在那里,您可以检查处理程序对象,以查看它是否具有一个名为 userId 的参数,例如使用 @PathVariable 进行注释。然后,您可以执行检查并使用响应对象在必要时返回404。
另一种选择是创建自定义@Aspect,但我们可能会使问题过于复杂。首先,尝试以前的解决方案。