RestTemplate jsonからエンティティークラスへの移行
14529 ワード
RestTemplate jsonからエンティティークラスへの移行
RestTemplateを使用してjavaサーバで他のurlのリソースにアクセスする必要がある場合がありますが、結局2台のサーバ(jvm)にあるクラスなので、エンティティクラスの転送はどのように行いますか?は、エンティティクラスの本例が を規定する.要求を受け付けるコード 変換例 依存 を添付踏んだ穴
解決策:カスタム日付解析器 解決方法リファレンス:リンクりんく
MyDateFormat.java
これでjsonを対応するエンティティクラスに変換できます.
END
RestTemplateを使用してjavaサーバで他のurlのリソースにアクセスする必要がある場合がありますが、結局2台のサーバ(jvm)にあるクラスなので、エンティティクラスの転送はどのように行いますか?
AgreementApproveForOA
を結果として返すエンティティクラス @ApiOperation(value = " ")
@PostMapping("/getAgreementApprove")
public ResponseEntity<AgreementApproveDTO> getAgreementApprove(@RequestParam Integer fcompanyId, @RequestParam Integer fcompanyType, @RequestHeader("fuid") Integer faid) {
return xxx;
}
public static AgreementApproveForOA getData() throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.add("fuid", "2");// header
String url = "http://localhost:8481/admin/admin/agreementApprove/getAgreementApprove?fcompanyId=174&fcompanyType=1";
ResponseEntity<String> data = restTemplate.postForEntity(url, new HttpEntity<String>(headers), String.class);// json
AgreementResponseEntity agreementResponseEntity;
//readValue(json ,json )
agreementResponseEntity = mapper.readValue(data.getBody(), AgreementResponseEntity.class);
return agreementResponseEntity.getRetEntity();
}
pom.xml
com.fasterxml.jackson.core
jackson-databind
2.9.5
com.fasterxml.jackson.core
jackson-core
2.10.0
org.springframework
spring-web
5.1.10.RELEASE
jackson
パッケージは2019-01-05 13:25:10
というフォーマットをサポートしていません.次のエラーが発生します. Cannot deserialize value of type `java.util.Date` from String "2019-10-03 00:00:00": not a valid representation (error: Failed to parse Date value '2019-10-03 00:00:00': Cannot parse date "2019-10-03 00:00:00": while it seems to fit format 'yyyy-MM-dd'T'HH:mm:ss.SSSZ', parsing fails (leniency? null))
Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder = new Jackson2ObjectMapperBuilder();
mapper = jackson2ObjectMapperBuilder.build();
DateFormat dateFormat = mapper.getDateFormat();
mapper.setDateFormat(new MyDateFormat(dateFormat));
MyDateFormat.java
public class MyDateFormat extends DateFormat {
private DateFormat dateFormat;
private SimpleDateFormat format1 = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
public MyDateFormat(DateFormat dateFormat) {
this.dateFormat = dateFormat;
}
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
return dateFormat.format(date, toAppendTo, fieldPosition);
}
@Override
public Date parse(String source, ParsePosition pos) {
Date date = null;
try {
date = format1.parse(source, pos);
} catch (Exception e) {
date = dateFormat.parse(source, pos);
}
return date;
}
//
@Override
public Date parse(String source) throws ParseException {
Date date = null;
try {
//
date = format1.parse(source);
} catch (Exception e) {
// ,
date = dateFormat.parse(source);
}
return date;
}
// clone clone jackson
@Override
public Object clone() {
Object format = dateFormat.clone();
return new MyDateFormat((DateFormat) format);
}
}
これでjsonを対応するエンティティクラスに変換できます.
END