外部函数签名是否需要@PathVariable 或@RequestBody?

Are @PathVariable or @RequestBody needed in external function signature?

我有一个关于公约的问题。一切正常(感谢上帝),但我不确定我的 AttributeService class 方法签名中是否需要注释(@PathVariable 和 @RequestBody):

@Autowired
private AttributeRepository attributeRepository;

public Attribute create(@RequestBody Attribute attribute) {
    return attributeRepository.save(attribute);
}

它可能会在有或没有它们的情况下工作,但它们在我的@RestController 控制器之外有任何用途吗? 控制器方法看起来像这样(这里我当然需要这些注释):

@PostMapping(consumes = "application/json")
public Attribute create(
        @RequestBody Attribute attribute
) {
    return attributeService.create(attribute);
}

我的意思是,如果我浏览我的服务 class 并且看到黄色注释,​​这让我很困惑,我误以为我在 Controller class :)

另外一个问题,同名可以吗"create"?控制器方法的名称实际上并不重要,因为它是自动调用的,但我问的是约定。我发现很容易让它们具有相同的名称,所以我知道快速匹配来自控制器的 create() 正在调用服务中的 create() (如果我有很多这样的方法)。

谢谢

是的,需要这些注释来将响应正文或路径变量中的文本自动反序列化到控制器中相应的 Java 对象。在您的服务 class 中,您使用 Java 对象,因此这些注释在这里是多余的。

至于命名约定,由您和您的同行决定:)

AttributeService 的方法中使用 @RequestBody 没有任何意义。没有框架会处理这个注解。

在我看来,read for GET、create for POST、update for PUT 和 delete for DELETE 分别是 HTTP 方法的好方法名称。如您所说,任何名称都可以。