CHECK PASS modern record constructor reflection hint registered
HINTS target/generated-hints
VERSION framework=7.0.1 servlet=6.1
CHECK PASS modern resolved framework matches frozen BOM
CHECK PASS modern actual servlet runtime contract matches baseline
CHECK PASS modern auto-configured JSON mapper uses expected namespace
CHECK PASS modern removed ListenableFuture API boundary observed
HTTP GET /payload 200 {"zebra":"Z","alpha":"A","nullable":null}
CHECK PASS modern record serialization produces JSON response
CHECK PASS modern default JSON includes null property
CHECK PASS modern record property values preserved
OBSERVED_PROPERTY_ORDER {"zebra":"Z","alpha":"A","nullable":null}
CHECK PASS modern record constructor property order preserved in this fixture
HTTP GET /bean 200 {"alpha":"A","nullable":null,"zebra":"Z"}
CHECK PASS modern ordinary bean JSON retains null property
CHECK PASS modern ordinary bean default property sorting differs across Jackson generations
OBSERVED_BEAN_ORDER {"alpha":"A","nullable":null,"zebra":"Z"}
HTTP GET /payload/ 404 {"timestamp":"2026-10-02T10:00:03.163Z","status":404,"error":"Not Found","path":"/payload/"}
CHECK PASS modern trailing slash is not implicitly matched
HTTP POST /input 200 order:2
CHECK PASS modern record JSON input is deserialized and validated
HTTP POST /input 200 order:2
CHECK PASS modern Boot default ignores unknown JSON property
2026-10-02T18:00:03.227+08:00  WARN 13015 --- [1-auto-1-exec-6] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in java.lang.String blog.spring.migration.MigrationProbe$Endpoints.input(blog.spring.migration.MigrationProbe$Input) with 2 errors: [Field error in object 'input' on field 'quantity': rejected value [0]; codes [Min.input.quantity,Min.quantity,Min.int,Min]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [input.quantity,quantity]; arguments []; default message [quantity],1]; default message [最小不能小于1]] [Field error in object 'input' on field 'name': rejected value []; codes [NotBlank.input.name,NotBlank.name,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [input.name,name]; arguments []; default message [name]]; default message [不能为空]] ]
HTTP POST /input 400 {"timestamp":"2026-10-02T10:00:03.229Z","status":400,"error":"Bad Request","path":"/input"}
CHECK PASS modern Jakarta bean validation rejects invalid record
2026-10-02T18:00:03.232+08:00  WARN 13015 --- [1-auto-1-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input: expected close marker for Object (start marker at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); byte offset: #UNKNOWN])]
HTTP POST /input 400 {"timestamp":"2026-10-02T10:00:03.233Z","status":400,"error":"Bad Request","path":"/input"}
CHECK PASS modern malformed JSON rejected
2026-10-02T18:00:03.244+08:00  WARN 13015 --- [1-auto-1-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: java.lang.String blog.spring.migration.MigrationProbe$Endpoints.input(blog.spring.migration.MigrationProbe$Input)]
HTTP POST /input 400 {"timestamp":"2026-10-02T10:00:03.245Z","status":400,"error":"Bad Request","path":"/input"}
CHECK PASS modern null required request body rejected
2026-10-02T18:00:03.248+08:00  WARN 13015 --- [1-auto-1-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'text/plain;charset=UTF-8' is not supported]
HTTP POST /input 415 {"timestamp":"2026-10-02T10:00:03.249Z","status":415,"error":"Unsupported Media Type","path":"/input"}
CHECK PASS modern unsupported input media type rejected
HTTP GET /quantity?value=2 200 2
CHECK PASS modern valid method constraint input succeeds
HTTP GET /quantity?value=0 400 {"timestamp":"2026-10-02T10:00:03.258Z","status":400,"error":"Bad Request","path":"/quantity"}
CHECK PASS modern MVC method validation rejects numeric constraint
2026-10-02T18:00:03.261+08:00  WARN 13015 --- [1-auto-1-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Method parameter 'value': Failed to convert value of type 'java.lang.String' to required type 'int'; For input string: "bad"]
HTTP GET /quantity?value=bad 400 {"timestamp":"2026-10-02T10:00:03.261Z","status":400,"error":"Bad Request","path":"/quantity"}
CHECK PASS modern parameter conversion failure remains 400
2026-10-02T18:00:03.264+08:00  WARN 13015 --- [1-auto-1-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' is not supported]
HTTP POST /payload 405 {"timestamp":"2026-10-02T10:00:03.264Z","status":405,"error":"Method Not Allowed","path":"/payload"}
CHECK PASS modern method mismatch remains 405
2026-10-02T18:00:03.267+08:00  WARN 13015 --- [1-auto-1-exec-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation]
HTTP GET /payload 406 
CHECK PASS modern unsupported response media type remains 406
2026-10-02T18:00:03.271+08:00  WARN 13015 --- [1-auto-1-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: intentional serializer failure]
HTTP GET /broken 500 {"timestamp":"2026-10-02T10:00:03.271Z","status":500,"error":"Internal Server Error","path":"/broken"}
CHECK PASS modern serializer getter exception returns 500 before commitment
CHECK PASS modern context shutdown releases listener
