REST Assured 63 - How To Create JSON With Date Fields Using POJO

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

Guess you like

Origin blog.csdn.net/wumingxiaoyao/article/details/120602240