REST Assured 系列汇总 之 REST Assured 63 - How To Create JSON With Date Fields Using POJO
介绍
{
"firstname" : "Jim",
"lastname" : "Brown",
"checkin" : "2018-01-01",
"checkout" : "2019-01-01"
}
上面的 JSON,“checkin” 和 “checkout” 字段的值均是日期。如果我们按 创建POJO 作为一个JSON Object Payload 的方式,我们可以定义这两个字段为 string,设置相应的值。
Create POJO with date fields as strings
public class Booking1 {
private String firstName;
private String lastName;
private String checkin;
private String checkout;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getCheckin() {
return checkin;
}
public void setCheckin(String checkin) {
this.checkin = checkin;
}
public String getCheckout() {
return checkout;
}
public void setCheckout(String checkout) {
this.checkout = checkout;
}
}
序列化 POJO 成 JSON
LocalDate 类
我们可以用 LocalDate 类获取想要的日期。LocalDate 默认的格式是 yyyy-MM-dd, 一个没有时间区的,例如:2007-12-03。LocalDate 类可以获取系统时钟在默认的时间区里当前的日期,也方便获取过去和将来的日期。
用 LocalDate 默认格式
本例子中,不会更改日期的格式,采用 LocalDate 的默认格式 yyyy-MM-dd。
import java.time.LocalDate;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class PojoToJson1 {
public static void main(String[] args) throws JsonProcessingException {
Booking1 booking1 = new Booking1();
booking1.setFirstName("Amod");
booking1.setLastName("Mahajan");
// default format is yyyy-MM-dd
LocalDate currentDate = LocalDate.now();
// Get 10 days from current date
booking1.setCheckin(currentDate.plusDays(10).toString());
// Get 20 days from current date
booking1.setCheckout(currentDate.plusDays(20).toString());
// POJO to JSON
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(booking1);
System.out.println(s);
// JSON to POJO
Booking1 b2 = objectMapper.readValue(s, Booking1.class);
System.out.println("Passed checkin date is "+ b2.getCheckin());
System.out.println("Passed checkout date is "+ b2.getCheckout());
}
}
输出:
{
"firstName" : "Amod",
"lastName" : "Mahajan",
"checkin" : "2021-10-14",
"checkout" : "2021-10-24"
}
Passed checkin date is 2021-10-14
Passed checkout date is 2021-10-24
自定义格式化日期
通常 LocalData 默认的日期格式满足不了你的需求,不用担心,LocalData 允许你自定义你想要的日期格式。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class PojoToJson2 {
public static void main(String[] args) throws JsonProcessingException {
Booking1 booking1 = new Booking1();
booking1.setFirstName("Amod");
booking1.setLastName("Mahajan");
// default format is yyyy-MM-dd
LocalDate currentDate = LocalDate.now();
// Get 10 days from current date
booking1.setCheckin(currentDate.plusDays(10).format(DateTimeFormatter.ofPattern("dd-MMM-yyyy")));
// Get 20 days from current date
booking1.setCheckout(currentDate.plusDays(20).format(DateTimeFormatter.ofPattern("dd-MMM-yyyy")));
// POJO to JSON
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(booking1);
System.out.println(s);
// JSON to POJO
Booking1 b2 = objectMapper.readValue(s, Booking1.class);
System.out.println("Passed checkin date is "+ b2.getCheckin());
System.out.println("Passed checkout date is "+ b2.getCheckout());
}
}
输出:
{
"firstName" : "Amod",
"lastName" : "Mahajan",
"checkin" : "14-十月-2021",
"checkout" : "24-十月-2021"
}
Passed checkin date is 14-十月-2021
Passed checkout date is 24-十月-2021
timestamp
有时需要时间戳,不仅是日期,那么可以用 LocalDateTime 类取代 LocalDate 类:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class PojoToJson3 {
public static void main(String[] args) throws JsonProcessingException {
Booking1 booking1 = new Booking1();
booking1.setFirstName("Amod");
booking1.setLastName("Mahajan");
// default format is yyyy-MM-dd
LocalDateTime currentDate = LocalDateTime.now();
// Get 10 days from current date
booking1.setCheckin(currentDate.plusDays(10).format(DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss")));
// Get 20 days from current date
booking1.setCheckout(currentDate.plusDays(20).format(DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss")));
// POJO to JSON
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(booking1);
System.out.println(s);
// JSON to POJO
Booking1 b2 = objectMapper.readValue(s, Booking1.class);
System.out.println("Passed checkin date is "+ b2.getCheckin());
System.out.println("Passed checkout date is "+ b2.getCheckout());
}
}
输出:
{
"firstName" : "Amod",
"lastName" : "Mahajan",
"checkin" : "14-十月-2021 12:01:31",
"checkout" : "24-十月-2021 12:01:31"
}
Passed checkin date is 14-十月-2021 12:01:31
Passed checkout date is 24-十月-2021 12:01:31