This article will teach you the simplest way to map Date and Time fields in an Entity when the request/response is from a REST Endpoint.
Defaults for Date / Time in REST Application
When your REST Endpoint exposes some Data and Time fields in JSON Format, you can mainly use two formats:
- A java.sql.Date format, which by default uses the format yyyy-mm-dd
- A javasql.Timestamp format, which by default uses the format yyyy-mm-ddThh:mm:ss
Here is a sample Entity which uses both Date and Time formats:
@Entity
public class Car {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
private java.sql.Date dateProd;
private java.sql.Timestamp timeProd;
}
Then, you can let JSONB handle the automatic mapping between Java and JSON by exposing an Endpoint which Consumes and Produces JSON data:
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createCar(Car car) {
Response.ResponseBuilder builder = null;
try {
ejb.save(car);
builder = Response.ok("Saved!");
} catch (Exception e) {
// Handle generic exceptions
Map<String, String> responseObj = new HashMap<>();
responseObj.put("error", e.getMessage());
builder = Response.status(Response.Status.BAD_REQUEST).entity(responseObj);
}
return builder.build();
}
Then, you can insert both Date and Time as text Strings using the default formats. For example, using Postman:

Otherwise, using plain cURL:
curl -X POST http://localhost:8080/jpa-basic/rest/carservice -H 'Content-Type: application/json' -d ' {"model":"fiat","price":"15090.10","dateProd":"2021-12-25", "timeProd":"2020-05-01T12:30:00"}'
Using a custom JSONBDateFormat
When your REST data uses a custom format for Date or Time then you can use the @jakarta.json.bind.annotation.JsonbDateFormat annotation to map your in/out fields. For example:
@JsonbDateFormat(value = "MM/dd/yyyy")
private Date dateProd;
@JsonbDateFormat("dd-MM-yyyy'T'HH:mm:ss")
private Timestamp timeProd;
With the above mapping, you will be able to issue the following Request for your REST Endpoint:
curl -X POST http://localhost:8080/jpa-basic/rest/carservice -H 'Content-Type: application/json' -d ' {"model":"fiat","price":"15090.10","dateProd":"2021-12-25", "timeProd":"2020-05-01T12:30:00"}'
Besides, you can also include the optional locale attribute to set the Locale for your date:
@JsonbDateFormat(value = "MM/dd/yyyy", locale = "Locale.ENGLISH"))
private Date dateProd;
@JsonbDateFormat("dd-MM-yyyy'T'HH:mm:ss", locale = "Locale.ENGLISH"))
private Timestamp timeProd;