33public record
ProblemDetails(URI type, String title,
int status, String detail, URI instance,
34 Map<String, Object> properties) {
37 type = type ==
null ? URI.create(
"about:blank") : type;
38 title = title ==
null || title.isBlank() ?
"Unknown problem" : title;
39 detail = detail ==
null ?
"" : detail;
40 properties = properties ==
null ? Map.of() : Map.copyOf(
new LinkedHashMap<>(properties));
43 public static Builder builder() {
47 public static ProblemDetails of(
final int status,
final String title,
final String detail) {
48 return builder().status(status).title(title).detail(detail).build();
51 public static final class Builder {
52 private URI type = URI.create(
"about:blank");
55 private String detail =
"";
57 private final Map<String, Object> properties =
new LinkedHashMap<>();
59 public Builder type(
final URI type) {
64 public Builder title(
final String title) {
69 public Builder status(
final int status) {
74 public Builder detail(
final String detail) {
79 public Builder instance(
final URI instance) {
80 this.instance = instance;
84 public Builder property(
final String key,
final Object value) {
85 this.properties.put(key, value);
90 return new ProblemDetails(type, title, status, detail, instance, properties);