首页 文章

@Transaction使我的REST endpoints 消失

提问于
浏览
2

tl;dr

  • @RestController 实现接口

  • 一切正常

  • 已添加 @Transactional
    在完全删除接口之前,

  • REST endpoints 不再被注册

Long story

我正在使用Spring Boot和Spring MVC来提供RESTful Web服务 . 我有一个 @RestController 类实现了一个接口,该接口具有所有 @RequestMapping 注释,可以更好地了解 endpoints 是什么并映射到哪些控制器方法 .

@RestController
public class UserController extends AbstractController implements IUserController {
...
}

@RequestMapping("/blub/user/")
public interface IUserController {

    @RequestMapping(value = "showEditUser/{id}", method = { RequestMethod.GET })
    public ShowEditUserResponse showEditUser(final Long userId);
...
}

一切都很好 . 在Startup上我得到了一堆日志消息,如:

Mapped "{[/blub/user/updateUser],methods=[PUT]}" onto public org.blub.core.rest.model.user.UpdateUserResponse org.blub.server.controller.impl.UserController.updateUser(org.blub.core.rest.model.user.UpdateUserRequest)

然后我将 @Transactional 添加到Controller的实现中(也试过了Interface) . logmessage现在改变了:

Mapped "{[/blub/user/updateUser],methods=[PUT]}" onto public org.blub.core.rest.model.user.UpdateUserResponse org.blub.server.controller.IUserController.updateUser(org.blub.core.rest.model.user.UpdateUserRequest)

请注意,消息将frpm impl.UserController 更改为 IUserController ,这会在调用URI时产生404 HTTP状态 .

当我将所有 @RequestMapping 注释移动到实现并删除整个接口时,一切都按预期工作 .

为什么有一个接口导致这种麻烦?我认为,特别是当谈到基于AOP的代理时,接口是“必须拥有的”?!

1 回答

  • 1

    我有同样的问题,我的项目也使用javamelody,whitch是一个使用代理的监控库 .

    禁用它后,我的休息终点恢复了生机 . 所以问题可能与spring mvc和代理库之间的一些代理干扰有关 .

相关问题