@Transaction使我的REST端点消失

时间:2015-09-01 18:44:50

标签: spring rest spring-mvc spring-boot

TL;博士

  • @RestController实施接口
  • 一切正常
  • 添加了@Transactional
  • 在我完全删除接口
  • 之前,REST端点不再被注册

长篇故事

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

@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的实现中(也尝试了接口)。现在,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)

请注意,邮件会从impl.UserController更改为IUserController,这会在调用URI时产生404 HTTP状态。

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

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

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我的项目也使用javamelody,whitch是一个使用代理的监控库。

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