1

JSON API를 통해 사용자 프로젝트를 관리하고 상대 경로 컨트롤러를 사용하고 싶습니다. 이와 같이 :Spring에서 사용자 존재 확인에 주석을 달려면 어떻게해야합니까?

@RequestMapping(value="https://stackoverflow.com/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을 찾았습니다. 이것은 실제로 설명 된 것처럼 복잡합니까? 다른 해결책을 알고 있습니까? (나는 4 개의 라인에 주석을 달기 위해서만 2 클래스와 50 라인 이상의 코드를 작성하는 것을 피하고 싶다.)

고맙습니다.

답변

3

나는이 수표가 보안과 아무런 관계가 없다고 가정한다.

나는 WebArgumentResolver가 사용자의 필요에 맞지 않을 것이라고 생각합니다. 404 상태를 반환하는 것은 다소 복잡 할 수 있습니다.

맞춤 interceptor이 더 나은 해결책 일 수 있습니다. 그것은 귀하의 컨트롤러에 대한 모든 요청에서 호출됩니다. 여기서 처리기 객체를 검사하여 userId이라는 매개 변수가 @PathVariable으로 주석 된 것으로 표시되는지 확인할 수 있습니다. 그런 다음 필요한 경우 검사를 수행하고 응답 객체를 사용하여 404를 반환 할 수 있습니다.

또 다른 옵션은 사용자 정의 @Aspect을 만들지 만 문제가 너무 복잡 할 수 있습니다. 먼저, 이전 솔루션을 사용해보십시오.

+0

실제로 보안과는 아무런 관련이 없습니다. 답변 해 주셔서 감사합니다. 요격기를 살펴 보겠습니다. –