@@ -108,7 +108,7 @@ public JsonDocumentWriter objectKey(String key) {
108108 throw new IllegalArgumentException ( "key cannot be null or empty" );
109109 }
110110
111- if (this .processingStates .getCurrent (). equals ( JsonProcessingState . OBJECT )) {
111+ if (JsonProcessingState . OBJECT . equals ( this .processingStates .getCurrent ())) {
112112 // we have started an object, and we are adding an item key: we do add a separator.
113113 this .appender .append ( StringJsonDocumentMarker .SEPARATOR .getMarkerCharacter () );
114114 }
@@ -222,13 +222,24 @@ public JsonDocumentWriter stringValue(String value) {
222222 }
223223
224224 @ Override
225- public JsonDocumentWriter serializeJsonValue (Object value , JavaType <Object > javaType , JdbcType jdbcType , WrapperOptions options ) {
225+ public < T > JsonDocumentWriter serializeJsonValue (Object value , JavaType <T > javaType , JdbcType jdbcType , WrapperOptions options ) {
226226 addItemsSeparator ();
227227 convertedBasicValueToString (value , options ,this .appender ,javaType ,jdbcType );
228228 moveProcessingStateMachine ();
229229 return this ;
230230 }
231231
232+ private <T > void convertedCastBasicValueToString (Object value ,
233+ WrapperOptions options ,
234+ JsonAppender appender ,
235+ JavaType <T > javaType ,
236+ JdbcType jdbcType ) {
237+ assert javaType .isInstance ( value );
238+ //noinspection unchecked
239+ convertedBasicValueToString ( (T ) value , options , appender , javaType , jdbcType );
240+ }
241+
242+
232243 /**
233244 * Converts a value to String according to its mapping type.
234245 * This method serializes the value and writes it into the underlying appender
@@ -238,12 +249,15 @@ public JsonDocumentWriter serializeJsonValue(Object value, JavaType<Object> java
238249 * @param jdbcType the JDBC SQL type of the value
239250 * @param options the wapping options.
240251 */
241- private void convertedBasicValueToString (
252+ private < T > void convertedBasicValueToString (
242253 Object value ,
243254 WrapperOptions options ,
244255 JsonAppender appender ,
245- JavaType <Object > javaType ,
256+ JavaType <T > javaType ,
246257 JdbcType jdbcType ) {
258+
259+ assert javaType .isInstance ( value );
260+
247261 switch ( jdbcType .getDefaultSqlTypeCode () ) {
248262 case SqlTypes .TINYINT :
249263 case SqlTypes .SMALLINT :
@@ -264,7 +278,7 @@ private void convertedBasicValueToString(
264278 case SqlTypes .REAL :
265279 case SqlTypes .DOUBLE :
266280 // These types fit into the native representation of JSON, so let's use that
267- javaType .appendEncodedString ( appender , value );
281+ javaType .appendEncodedString ( appender , ( T ) value );
268282 break ;
269283 case SqlTypes .CHAR :
270284 case SqlTypes .NCHAR :
@@ -290,15 +304,15 @@ private void convertedBasicValueToString(
290304 // These literals can contain the '"' character, so we need to escape it
291305 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
292306 appender .startEscaping ();
293- javaType .appendEncodedString ( appender , value );
307+ javaType .appendEncodedString ( appender , ( T ) value );
294308 appender .endEscaping ();
295309 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
296310 break ;
297311 case SqlTypes .DATE :
298312 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
299313 JdbcDateJavaType .INSTANCE .appendEncodedString (
300314 appender ,
301- javaType .unwrap ( value , java .sql .Date .class , options )
315+ javaType .unwrap ( ( T ) value , java .sql .Date .class , options )
302316 );
303317 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
304318 break ;
@@ -308,23 +322,23 @@ private void convertedBasicValueToString(
308322 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
309323 JdbcTimeJavaType .INSTANCE .appendEncodedString (
310324 appender ,
311- javaType .unwrap ( value , java .sql .Time .class , options )
325+ javaType .unwrap ( ( T ) value , java .sql .Time .class , options )
312326 );
313327 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
314328 break ;
315329 case SqlTypes .TIMESTAMP :
316330 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
317331 JdbcTimestampJavaType .INSTANCE .appendEncodedString (
318332 appender ,
319- javaType .unwrap ( value , java .sql .Timestamp .class , options )
333+ javaType .unwrap ( ( T ) value , java .sql .Timestamp .class , options )
320334 );
321335 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
322336 break ;
323337 case SqlTypes .TIMESTAMP_WITH_TIMEZONE :
324338 case SqlTypes .TIMESTAMP_UTC :
325339 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
326340 DateTimeFormatter .ISO_OFFSET_DATE_TIME .formatTo (
327- javaType .unwrap ( value , OffsetDateTime .class , options ),
341+ javaType .unwrap ( ( T ) value , OffsetDateTime .class , options ),
328342 appender
329343 );
330344 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
@@ -335,7 +349,7 @@ private void convertedBasicValueToString(
335349 case SqlTypes .UUID :
336350 // These types need to be serialized as JSON string, but don't have a need for escaping
337351 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
338- javaType .appendEncodedString ( appender , value );
352+ javaType .appendEncodedString ( appender , ( T ) value );
339353 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
340354 break ;
341355 case SqlTypes .BINARY :
@@ -346,7 +360,7 @@ private void convertedBasicValueToString(
346360 case SqlTypes .MATERIALIZED_BLOB :
347361 // These types need to be serialized as JSON string, and for efficiency uses appendString directly
348362 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
349- appender .write ( javaType .unwrap ( value , byte [].class , options ) );
363+ appender .write ( javaType .unwrap ( ( T ) value , byte [].class , options ) );
350364 appender .append ( StringJsonDocumentMarker .QUOTE .getMarkerCharacter () );
351365 break ;
352366 case SqlTypes .ARRAY :
0 commit comments