2016-04-28 67 views
2

對於注射@PathVariable實體我的意思是我怎麼能力彈簧DATA REST @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")); 
} 

@PathVariable Project entity將是無效的,如果不project-id在庫中找到,我想是這樣的

@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")在這裏不起作用,我該怎麼做這樣的事情?

回答

0

用方法setProjectPostToEntity(entity, request)創建服務並用@Transactional@PreAuthorize註釋它。該方法保證你的變量將存在。 而在控制器方法有關@Transactionalhttps://stackoverflow.com/a/23120647/5649869

+0

感謝鏈接,我想介紹一下服務層是reasonable.But我覺得這也是一個常見的情況,我可以在這裏進行預授權,這是非常有用的。 – wener

+0

>但是,如果在存儲庫中找不到項目標識,則@PathVariable項目實體將爲空。你的意思是你向DB請求? –

+0

而'@ PreAuthorize'通常用於從SecurityContextHolder中檢查用戶的憑證 –