Add @Nullable to ProblemDetail.setProperty argument

See gh-29868
This commit is contained in:
Eden Tyler-Moss
2023-01-22 06:18:32 +00:00
committed by rstoyanchev
parent b578ff1296
commit aa9f445422
3 changed files with 9 additions and 4 deletions

View File

@@ -209,7 +209,7 @@ public class ProblemDetail {
* @param value the property value * @param value the property value
* @see org.springframework.http.converter.json.ProblemDetailJacksonMixin * @see org.springframework.http.converter.json.ProblemDetailJacksonMixin
*/ */
public void setProperty(String name, Object value) { public void setProperty(String name, @Nullable Object value) {
this.properties = (this.properties != null ? this.properties : new LinkedHashMap<>()); this.properties = (this.properties != null ? this.properties : new LinkedHashMap<>());
this.properties.put(name, value); this.properties.put(name, value);
} }

View File

@@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import org.springframework.http.ProblemDetail; import org.springframework.http.ProblemDetail;
import org.springframework.lang.Nullable;
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY; import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;
@@ -46,7 +47,7 @@ import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;
public interface ProblemDetailJacksonMixin { public interface ProblemDetailJacksonMixin {
@JsonAnySetter @JsonAnySetter
void setProperty(String name, Object value); void setProperty(String name, @Nullable Object value);
@JsonAnyGetter @JsonAnyGetter
Map<String, Object> getProperties(); Map<String, Object> getProperties();

View File

@@ -52,13 +52,15 @@ public class ProblemDetailJacksonMixinTests {
void writeCustomProperty() throws Exception { void writeCustomProperty() throws Exception {
ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Missing header"); ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.BAD_REQUEST, "Missing header");
problemDetail.setProperty("host", "abc.org"); problemDetail.setProperty("host", "abc.org");
problemDetail.setProperty("user", null);
testWrite(problemDetail, testWrite(problemDetail,
"{\"type\":\"about:blank\"," + "{\"type\":\"about:blank\"," +
"\"title\":\"Bad Request\"," + "\"title\":\"Bad Request\"," +
"\"status\":400," + "\"status\":400," +
"\"detail\":\"Missing header\"," + "\"detail\":\"Missing header\"," +
"\"host\":\"abc.org\"}"); "\"host\":\"abc.org\"," +
"\"user\":null}");
} }
@Test @Test
@@ -68,13 +70,15 @@ public class ProblemDetailJacksonMixinTests {
"\"title\":\"Bad Request\"," + "\"title\":\"Bad Request\"," +
"\"status\":400," + "\"status\":400," +
"\"detail\":\"Missing header\"," + "\"detail\":\"Missing header\"," +
"\"host\":\"abc.org\"}", ProblemDetail.class); "\"host\":\"abc.org\"," +
"\"user\":null}", ProblemDetail.class);
assertThat(problemDetail.getType()).isEqualTo(URI.create("about:blank")); assertThat(problemDetail.getType()).isEqualTo(URI.create("about:blank"));
assertThat(problemDetail.getTitle()).isEqualTo("Bad Request"); assertThat(problemDetail.getTitle()).isEqualTo("Bad Request");
assertThat(problemDetail.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value()); assertThat(problemDetail.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
assertThat(problemDetail.getDetail()).isEqualTo("Missing header"); assertThat(problemDetail.getDetail()).isEqualTo("Missing header");
assertThat(problemDetail.getProperties()).containsEntry("host", "abc.org"); assertThat(problemDetail.getProperties()).containsEntry("host", "abc.org");
assertThat(problemDetail.getProperties()).containsEntry("user", null);
} }