0

필자의 삶에서 볼 수없는 디자인 문제가있다. 좋은 코드에는 중복이 없습니다. 모든 기본 동작을 상속받을 수 있도록 DAO를 생성했습니다. Annotated 컨트롤러를 사용하여 Spring MVC와 동일한 작업을 수행하려고합니다. Spring MVC에서 REST 컨트롤러를 생성하여 중복을 제거하는 방법

나는이 질문을 찾았지만 아무 대답이 없다 : How to Remove Duplication from Spring 3 MVC Standard and Ajax Request Controllers and Views

나는 아래의 예처럼 뭔가, 어떻게 AbstractBaseService 및 BASEMODEL 사용 리팩토링 (내가 이런 짓을하지만, 코드가없는) 가정이있는 경우 GenericAbstractBaseController 또는 BaseController 인터페이스와 같은 것으로 주석 정보를 넣을 수 있습니까? 나는 시도했다. (코드는 없다.)하지만 문제는 주석이 상속되지 않으며 런타임에 추가 될 수 없다는 것이다.

javassist를 바이트 코드 수정에 사용할 수 있으므로 실제로 코드를 깨끗하게 유지하기 위해 컴파일 한 후에 주석을 추가 할 수 있지만 지나치게 복잡해 보입니다.

나는 멘토에게 쪽지를 보냈지 만 그는 상속 된 클래스의 주석을 식별하기 위해 조언이나 반성을하기 위해 명명 규칙을 사용하여 AOP를 사용하도록 제안했지만 실제로이 정보를 봄에 어떻게 제공 할 수 있었는지 확신 할 수는 없습니다. 런타임에 실제로 주석을 추가 할 수 없습니다. 나는 누군가가 와서 떨어 뜨릴 것 같은 중요한 열쇠를 놓치고 있다고 생각한다. 그는 단지 몇 줄을 돌려 주었다.

코드는 다음과 같습니다. 중복 크러스트 논리를 제거하려면 어떻게해야합니까?

@Controller 
@RequestMapping("/users") 
public class UserController { 

@Autowired 
UserService userService; 

@RequestMapping(value="/", method = RequestMethod.GET) 
public @ResponseBody List<User> doGetIndex(ModelMap model) { 
    return userService.listPage(0, 10); 
} 

@RequestMapping(value="/{name}", method = RequestMethod.GET) 
public @ResponseBody User doGet(@PathVariable String name, ModelMap model) { 
    return userService.getByUsername(name); 
} 

//post 

//put 

//delete 

답변

0

나는 확실히 당신이 "주석이 상속되지 않습니다"무엇을 의미합니까 이해하지 않지만, 지금까지 내가 기억하는 다음과 같은 접근 방식은 작동합니다 :

public class AbstractController<T> { 
    @RequestMapping(value="", method = RequestMethod.GET) 
    public @ResponseBody List<User> doGetIndex(ModelMap model) { ... } 

    @RequestMapping(value="{name}", method = RequestMethod.GET) 
    public @ResponseBody T doGet(@PathVariable String name, ModelMap model) { ... } 
} 

@Controller 
@RequestMapping("/users") 
public class UserController extends AbstractController<User> { ... } 
+0

는 그 일을합니까? 나는 주석이 상속되었다고 생각하지 않았다. 다시 시도 할게. 나는 그런 일반적인 추상 컨트롤러를 가지고있다 - 나는 다시 시도하고 나중에 게시 할 것이다 - 고마워. –

관련 문제