Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring rest体系结构中的重复信息_Spring_Rest_Spring Restcontroller - Fatal编程技术网

Spring rest体系结构中的重复信息

Spring rest体系结构中的重复信息,spring,rest,spring-restcontroller,Spring,Rest,Spring Restcontroller,在我的对象MedicalContactTo中,我有medicalContactId,所以对我来说,似乎我们复制了信息,但url允许 定义我们做什么 我没有将medicalContactId值传递给方法 这是处理此类案件的正常方法吗?我认为正确的方法是这样处理: @RequestMapping(value = "/medicalcontacts/{medicalContactId}", method =RequestMethod.PUT) public void updateMedicalCont

在我的对象MedicalContactTo中,我有medicalContactId,所以对我来说,似乎我们复制了信息,但url允许 定义我们做什么

我没有将medicalContactId值传递给方法


这是处理此类案件的正常方法吗?

我认为正确的方法是这样处理:

@RequestMapping(value = "/medicalcontacts/{medicalContactId}", method =RequestMethod.PUT)
public void updateMedicalContact(@RequestBody @Valid final MedicalContactDto medicalContactDto, @PathVariable("medicalContactId") long medicalContactId){
     medicalContactService.save(medicalContactDto);
}
原因是,在某些资源上使用PUT意味着您想要更改它


如果像以前一样使用它,当地址和对象中的medicalContactId不同时,可能会遇到一些问题。这将是一个很难找到的bug。

我想正确的方法是这样:

@RequestMapping(value = "/medicalcontacts/{medicalContactId}", method =RequestMethod.PUT)
public void updateMedicalContact(@RequestBody @Valid final MedicalContactDto medicalContactDto, @PathVariable("medicalContactId") long medicalContactId){
     medicalContactService.save(medicalContactDto);
}
原因是,在某些资源上使用PUT意味着您想要更改它


如果像以前一样使用它,当地址和对象中的medicalContactId不同时,可能会遇到一些问题。这将是一个很难找到的bug。

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

如果从
MedicalContactDto
中删除
medicalContactId
,则无法在其他地方重用此DTO

因此,我的做法是从
@PathVariable
中删除id,除非您在来到控制器之前想基于PathVariable进行一些验证

例:下面的例子

在拦截器中[控制在控制器之前到达拦截器]


如果仍要保留pathvariable,请使用该值将
MedicalContactDTD的
medicalContactId
设置为

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

如果从
MedicalContactDto
中删除
medicalContactId
,则无法在其他地方重用此DTO

因此,我的做法是从
@PathVariable
中删除id,除非您在来到控制器之前想基于PathVariable进行一些验证

例:下面的例子

在拦截器中[控制在控制器之前到达拦截器]


如果仍要保留pathvariable,请使用该值设置
MedicalContactDto的
medicalContactId

我将在url中使用id并忽略dto中的id。我将在url中使用id并忽略dto中的id。如果删除pathvariable,我的url将更改。。。将对post和putok进行相同的调用,请理解,在这种情况下,不要删除path变量,保留两个参数,并将此
medicalContactDto.setMedicalContactId(medicalContactId)编码如果删除pathvariable,我的url将更改。。。将对post和putok进行相同的调用,请理解,在这种情况下,不要删除path变量,保留两个参数,并将此
medicalContactDto.setMedicalContactId(medicalContactId)编码@roberttrudel-这不是它的工作方式:)。现在,你知道你在“正确地”使用它,你在使用正确的id和正确的医疗契约。不过,在将来,您可以轻松地切换一些变量。@roberttrudel-它不是这样工作的:)。现在,你知道你在“正确地”使用它,你在使用正确的id和正确的医疗契约。不过,在将来,您可以轻松地切换一些变量。
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.