【问题标题】:How can I force Spring DATA REST @PathVariable entity exists如何强制存在 Spring DATA REST @PathVariable 实体
【发布时间】:2016-04-28 12:12:31
【问题描述】:

我的意思是注入@PathVariable实体

@RequestMapping(method = RequestMethod.PUT, path = "{project-id}")
@Transactional
@PreAuthorize("#user.id == #project.userId")
public Object update(@P("user") @Current User user,
                     @P("project") @PathVariable Project entity,
                     @RequestBody @Valid ProjectPost request) {
    setProjectPostToEntity(entity, request);

    return ResponseEntity.ok(ImmutableMap.of("message", "Project update successful"));
}

但是如果在存储库中找不到project-id@PathVariable Project entity 将为空,我想要的是这样的

@RequestMapping(method = RequestMethod.PUT, path = "{project-id}")
@Transactional
@PreAuthorize("#user.id == #project.userId")
public Object update(@P("user") @Current User user,
                     @P("project") @PathVariable @Valid @NotNull(message="Update project not exists") Project entity,
                     @RequestBody @Valid ProjectPost request) {
    setProjectPostToEntity(entity, request);

    return ResponseEntity.ok(ImmutableMap.of("message", "Project update successful"));
}

如果在存储库中找不到project-id 将返回消息Update project not exists,但@Valid @NotNull(message="Update project not exists") 在此处不起作用,我该怎么做?

【问题讨论】:

    标签: java spring entity-framework spring-mvc spring-data


    【解决方案1】:

    使用方法setProjectPostToEntity(entity, request) 创建服务并使用@Transactional@PreAuthorize 对其进行注释。这种方法保证你的变量将存在。 关于控制器方法的@Transactionalhttps://stackoverflow.com/a/23120647/5649869

    【讨论】:

    • 感谢链接,我认为引入服务层是合理的。但是我认为这也是一个常见的用例,我可以在这里进行PreAuthorize,这非常有用。
    • > 但是,如果在存储库中找不到项目 ID,@PathVariable 项目实体将为空。你的意思是你向 DB 提出请求?
    • @PreAuthorize 通常用于检查来自SecurityContextHolder 的用户的凭据
    猜你喜欢
    • 2019-09-30
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2014-05-05
    • 2021-06-16
    • 2018-05-25
    • 2012-10-04
    相关资源
    最近更新 更多