接口格式如下:
@PostMapping("/MedicalInformation")
@ApiOperation(value = "XXX接口描述")
@ResponseBody
public ResultResponse MedicalInformation(@RequestBody ProcessDto processDto) {
try {
MedicalInformationDto medicalInformationDto = processDto.getRequestContent();
if(medicalInformationDto == null){
return ResultResponse.fail(null, ErrorCode.CORE_IS_NULL.getMessage(),ErrorCode.CORE_IS_NULL.getCode());
}
JSONObject jsonObject = hsCasesService.saveProcessData(medicalInformationDto);
return ResultResponse.ok(jsonObject,"操作成功","00000");
}catch (Exception e){
e.printStackTrace();
return ResultResponse.fail(null,"系统异常,请联系管理员!","00001");
}
}
接口入参对象如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProcessDto {
private String AUTHCode;
private String Version;
private String RequestTime;
private MedicalInformationDto RequestContent;
}
请求如下:
接口收到请求如下:
发现接口请求的入参与接口定义的入参的字段完全一样,但是却没有收到参数值???
原因:
当请求接口的入参是对象时会使用@RequestBody注解将请求的入参(json格式)映射到相应的对象属性上,这时候就会将入参的字段与接口定义的字段进行匹配,虽然接口定义中声明的是大写的,但是底层默认将其转换为驼峰格式的字段名,如下:
这种情况下可以使用@JsonProperty注解作用在字段或方法上,用来对属性在序列化/反序列化时,可以用它来避免遗漏属性,同时提供对属性名称重命名,如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProcessDto {
@JsonProperty(value = "AUTHCode")
private String AUTHCode;
@JsonProperty(value = "Version")
private String Version;
@JsonProperty(value = "RequestTime")
private String RequestTime;
@JsonProperty(value = "RequestContent")
private MedicalInformationDto RequestContent;
}
问题解决
修改后同样使用上述请求触发,如下: