1

我想通过 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。

我发现本教程可以做到这一点。这真的像描述的那么复杂吗?你知道其他解决方案吗?(我想避免编写 2 个类和 50 多行代码,仅注释 4 行。)

谢谢你。

4

1 回答 1

3

我首先假设此检查与安全性无关,是吗?

我认为WebArgumentResolver不适合您的需求。返回 404 状态可能很复杂。

也许自定义拦截器可能是更好的解决方案。它将在对您的控制器的每个请求中调用。例如,您可以在那里检查处理程序对象,以查看它是否有一个名为userId的参数,该参数使用@PathVariable进行注释。然后,您可以进行检查并在必要时使用响应对象返回 404。

另一种选择是创建自定义@Aspect,但我们可能使问题过于复杂。所以首先,尝试以前的解决方案。

于 2012-03-06T11:17:26.000 回答