1
@RequestMapping(value = "/medicalcontacts/{medicalContactId}", method =RequestMethod.PUT)
public void updateMedicalContact(@RequestBody @Valid final MedicalContactDto medicalContactDto, @PathVariable("medicalContactId") long medicalContactId){
     medicalContactService.save(medicalContactDto);
}

在我的对象 MedicalContactDto 中,我有 medicalContactId,所以对我来说,这似乎是我们重复的信息,但 url 允许定义我们的工作......

我没有将 medicalContactId 值传递给该方法...

这是处理这种情况的正常方式吗?

4

2 回答 2

0

删除@PathVariable此 API 中的 。仅使用MedicalContactDto.

如果从 中删除medicalContactIdMedicalContactDto则不能在其他地方重用此 DTO。

所以我的做法是从 中删除 id @PathVariable,除非您想在访问 Controller 之前基于 PathVariable 进行一些验证

例如:下面的情况

In an Interceptor [控制在控制器之前到达拦截器]

Map pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
String contactId= (String) pathVariables.get("medicalContactId");
// do some validation and prevent the control from even going to controller.

如果您仍想保留路径变量,请使用该值来设置medicalContactId.MedicalContactDto

于 2015-08-11T14:53:49.897 回答
0

我想正确的方法是这样:

@RequestMapping(value = "/medicalcontacts/{medicalContactId}", method =RequestMethod.PUT)
public void updateMedicalContact(@RequestBody @Valid final MedicalContactDto medicalContactDto, @PathVariable("medicalContactId") long medicalContactId){
     medicalContactDto.setMedicalContactId(medicalContactId);
     medicalContactService.save(medicalContactDto);
}

原因是在某些资源上使用 PUT 意味着您要更改它。

如果您像以前一样使用它,您可能会遇到一些麻烦,当地址和对象中的 medicalContactId 不小心不同时。这将是一个很难发现的错误。

于 2015-08-11T14:35:47.777 回答