类com.fasterxml.jackson.databind.ObjectReader源码实例Demo

下面列出了怎么用com.fasterxml.jackson.databind.ObjectReader的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: dremio-oss   文件: ProtobufByteStringSerDe.java
/**
 * Deserialize the given byte string to an object using the given reader, employing the given codec algorithm.
 *
 * @param reader     object reader
 * @param byteString byte string to deserialize
 * @param codec      codec
 * @param logger     logger
 * @param <T>        object type of the deserialized object
 * @return deserialized object
 * @throws IOException in case of deserialization errors
 */
public static <T> T readValue(ObjectReader reader, ByteString byteString, Codec codec, Logger logger)
    throws IOException {

  if (logger.isTraceEnabled()) {
    // Costly conversion to UTF-8. Avoid if possible
    ByteSource bs = new ByteSource() {
      @Override
      public InputStream openStream() throws IOException {
        return codec.decompress(byteString.newInput());
      }};
    final String value = bs.asCharSource(StandardCharsets.UTF_8).read();
    logger.trace("Attempting to read {}", value);

    // Could reuse the value but to avoid so that logger level doesn't impact the program flow
    // Since level is trace, user probably doesn't care for performance right now
    // return reader.readValue(value);
  }

  try (InputStream is = codec.decompress(byteString.newInput())) {
    return reader.readValue(is);
  }
}
 
@Test
public void testStrictDeserializeFromEmptyString() throws Exception {

    final String key = "zoneOffset";
    final ObjectMapper mapper = mapperBuilder()
            .withCoercionConfig(LogicalType.DateTime,
                    cfg -> cfg.setCoercion(CoercionInputShape.EmptyString, CoercionAction.Fail))
            .build();
    final ObjectReader objectReader = mapper.readerFor(MAP_TYPE_REF);

    String valueFromNullStr = mapper.writeValueAsString(asMap(key, null));
    Map<String, ZoneOffset> actualMapFromNullStr = objectReader.readValue(valueFromNullStr);
    assertNull(actualMapFromNullStr.get(key));

    String valueFromEmptyStr = mapper.writeValueAsString(asMap(key, ""));
    try {
        objectReader.readValue(valueFromEmptyStr);
        fail("Should not pass");
    } catch (MismatchedInputException e) {
        verifyException(e, "Cannot coerce empty String");
        verifyException(e, ZoneOffset.class.getName());
    }
}
 
@Override
public Artifact deserialize(JsonParser parser, DeserializationContext ctxt) 
  throws IOException, JsonProcessingException 
{
    JsonNode node = parser.readValueAsTree();
    ObjectMapper mapper = (ObjectMapper)parser.getCodec();
    ObjectReader reader = null; 
    Object target = null;
    String artifcatType = node.get("artifactType").asText();

    System.out.println(artifcatType);

    if(artifcatType.equalsIgnoreCase("reservedinstance"))
    {
        reader = mapper.readerFor(ReservedInstanceArtifact.class);
    }
    else 
    {
        reader = mapper.readerFor(Artifact.class);
    }

    target = reader.readValue(node);

    return (Artifact)target;
}
 
源代码4 项目: pocket-etl   文件: CsvInputStreamMapper.java
/**
 * Converts an inputStream into an iterator of objects using Jackson CSV mapper.
 * @param inputStream inputStream in CSV format.
 * @return An iterator based on the inputStream.
 */
@Override
public Iterator<T> apply(InputStream inputStream) {
    try {
        CsvSchema csvSchema = mapper.schemaFor(objectClass);

        if (columnSeparator != null) {
            csvSchema = csvSchema.withColumnSeparator(columnSeparator);
        }
        
        ObjectReader reader = mapper.readerFor(objectClass).withFeatures(CsvParser.Feature.FAIL_ON_MISSING_COLUMNS)
                .with(csvSchema);

        return reader.readValues(inputStream);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
 
@Test
public void deserializesResponseUsinGivenReader() throws IOException {

    // given
    ObjectReader mockedObjectReader = mock(ObjectReader.class);
    BlockingResponseHandler<Response> handler = new BlockingResponseHandler<>(
            mockedObjectReader, ex -> null);

    InputStream inputStream = mock(InputStream.class);

    // when
    handler.deserializeResponse(inputStream);

    // then
    verify(mockedObjectReader).readValue(any(InputStream.class));

}
 
源代码6 项目: jackson-modules-java8   文件: ZoneIdDeserTest.java
@Test
public void testLenientDeserializeFromEmptyString() throws Exception {

    String key = "zoneId";
    ObjectMapper mapper = newMapper();
    ObjectReader objectReader = mapper.readerFor(MAP_TYPE_REF);

    String valueFromNullStr = mapper.writeValueAsString(asMap(key, null));
    Map<String, ZoneId> actualMapFromNullStr = objectReader.readValue(valueFromNullStr);
    ZoneId actualDateFromNullStr = actualMapFromNullStr.get(key);
    assertNull(actualDateFromNullStr);

    String valueFromEmptyStr = mapper.writeValueAsString(asMap(key, ""));
    Map<String, ZoneId> actualMapFromEmptyStr = objectReader.readValue(valueFromEmptyStr);
    ZoneId actualDateFromEmptyStr = actualMapFromEmptyStr.get(key);
    assertEquals("empty string failed to deserialize to null with lenient setting", null, actualDateFromEmptyStr);
}
 
源代码7 项目: BlogManagePlatform   文件: JSONUtil.java
/**
 * 获取Reader
 * @author Frodez
 * @date 2019-05-24
 */
@SneakyThrows
public static ObjectReader reader(Class<?> parametrized, @Nullable Class<?>... genericClasses) {
	Assert.notNull(parametrized, "parametrized must not be null");
	if (EmptyUtil.yes(genericClasses)) {
		return singleClassReaderCache.computeIfAbsent(parametrized, (k) -> OBJECT_MAPPER.readerFor(OBJECT_MAPPER.getTypeFactory().constructType(
			parametrized)));
	} else {
		StringBuilder builder = new StringBuilder(parametrized.getName());
		for (Class<?> klass : genericClasses) {
			builder.append(klass.getName());
		}
		return multiClassReaderCache.computeIfAbsent(builder.toString(), (i) -> OBJECT_MAPPER.readerFor(OBJECT_MAPPER.getTypeFactory()
			.constructParametricType(parametrized, genericClasses)));
	}
}
 
源代码8 项目: quarkus   文件: FunqyLambdaBindingRecorder.java
public void chooseInvoker(FunqyConfig config) {
    // this is done at Runtime so that we can change it with an environment variable.
    if (config.export.isPresent()) {
        invoker = FunctionRecorder.registry.matchInvoker(config.export.get());
        if (invoker == null) {
            throw new RuntimeException("quarkus.funqy.export does not match a function: " + config.export.get());
        }
    } else if (FunctionRecorder.registry.invokers().size() == 0) {
        throw new RuntimeException("There are no functions to process lambda");

    } else if (FunctionRecorder.registry.invokers().size() > 1) {
        throw new RuntimeException("Too many functions.  You need to set quarkus.funqy.export");
    } else {
        invoker = FunctionRecorder.registry.invokers().iterator().next();
    }
    if (invoker.hasInput()) {
        reader = (ObjectReader) invoker.getBindingContext().get(ObjectReader.class.getName());
    }
    if (invoker.hasOutput()) {
        writer = (ObjectWriter) invoker.getBindingContext().get(ObjectWriter.class.getName());
    }

}
 
源代码9 项目: onos   文件: TapiDeviceHelper.java
protected static Set<String> getUuids(DeviceId deviceId, DriverHandler handler) {
    RestSBController controller = checkNotNull(handler.get(RestSBController.class));
    ObjectMapper om = new ObjectMapper();
    final ObjectReader reader = om.reader();
    InputStream response = controller.get(deviceId, CONN_REQ_GET_API, MediaType.APPLICATION_JSON_TYPE);
    JsonNode jsonNode;
    try {
        jsonNode = reader.readTree(response);
        if (jsonNode == null) {
            log.error("JsonNode is null for response {}", response);
            return ImmutableSet.of();
        }
        return parseTapiGetConnectivityRequest(jsonNode);
    } catch (IOException e) {
        log.error("Exception while reading response {}", response, e);
        return ImmutableSet.of();
    }
}
 
源代码10 项目: jackson-modules-java8   文件: LocalTimeDeserTest.java
@Test( expected =  MismatchedInputException.class)
public void testStrictDeserializeFromEmptyString() throws Exception {

    final String key = "localTime";
    final ObjectMapper mapper = mapperBuilder()
            .withConfigOverride(LocalTime.class,
                    c -> c.setFormat(JsonFormat.Value.forLeniency(false)))
            .build();
    final ObjectReader objectReader = mapper.readerFor(MAP_TYPE_REF);

    String valueFromNullStr = mapper.writeValueAsString(asMap(key, null));
    Map<String, LocalTime> actualMapFromNullStr = objectReader.readValue(valueFromNullStr);
    assertNull(actualMapFromNullStr.get(key));

    String valueFromEmptyStr = mapper.writeValueAsString(asMap("date", ""));
    objectReader.readValue(valueFromEmptyStr);
}
 
源代码11 项目: buck   文件: ObjectMappersTest.java
@Test
@Parameters(method = "getSerializeAndDeserializePathData")
@TestCaseName("canSerializeAndDeserializePath({0}_{1})")
public void canSerializeAndDeserializePath(Path path, boolean typed) throws Exception {
  Obj obj = new Obj();
  obj.path = path;

  ObjectWriter writer = typed ? ObjectMappers.WRITER_WITH_TYPE : ObjectMappers.WRITER;
  ObjectReader reader = typed ? ObjectMappers.READER_WITH_TYPE : ObjectMappers.READER;

  String data = writer.writeValueAsString(obj);

  Obj actual = reader.forType(Obj.class).readValue(data);

  assertEquals(path, actual.path);
}
 
源代码12 项目: conf4j   文件: JsonConverter.java
@Override
public T fromString(Type type, String value, Map<String, String> attributes) {
    requireNonNull(type, "type cannot be null");

    if (value == null) {
        return null;
    }

    try {
        JavaType javaType = TypeFactory.defaultInstance().constructType(type);
        ObjectReader objectReader = objectMapper.readerFor(javaType);
        return objectReader.readValue(value);
    } catch (IOException e) {
        // should never happen
        throw new IllegalStateException(e);
    }
}
 
@Test ( expected =  MismatchedInputException.class)
public void testStrictDeserializeFromEmptyString() throws Exception {

    final String key = "OffsetDateTime";
    final ObjectMapper mapper = mapperBuilder()
            .withConfigOverride(OffsetDateTime.class,
                    o -> o.setFormat(JsonFormat.Value.forLeniency(false)))
        .build();

    final ObjectReader objectReader = mapper.readerFor(MAP_TYPE_REF);

    String valueFromNullStr = mapper.writeValueAsString(asMap(key, null));
    Map<String, OffsetDateTime> actualMapFromNullStr = objectReader.readValue(valueFromNullStr);
    assertNull(actualMapFromNullStr.get(key));

    String valueFromEmptyStr = mapper.writeValueAsString(asMap(key, ""));
    objectReader.readValue(valueFromEmptyStr);
}
 
源代码14 项目: pinpoint   文件: ObjectReaderIT.java
@Test
public void testReadValue() throws Exception {
    String json_str = "{\"name\" : \"Jackson\"}";
    byte[] json_b = json_str.getBytes(UTF_8);
    
    ObjectReader reader = mapper.reader(__POJO.class);
    
    __POJO pojo = reader.readValue(json_str);
    pojo = reader.readValue(json_b);

    PluginTestVerifier verifier = PluginTestVerifierHolder.getInstance();
    verifier.printCache();

    Method readval1 = ObjectReader.class.getMethod("readValue", String.class);
    Method readval2 = ObjectReader.class.getMethod("readValue", byte[].class);

    verifier.verifyTrace(event("JACKSON", readval1, Expectations.annotation("jackson.json.length", json_str.length())));
    verifier.verifyTrace(event("JACKSON", readval2, Expectations.annotation("jackson.json.length", json_b.length)));

    verifier.verifyTraceCount(0);
}
 
源代码15 项目: OAuth-2.0-Cookbook   文件: JweTokenSerializer.java
public Map<String, Object> decode(String base64EncodedKey, String content) {
    try {
        byte[] decodedKey = Base64.getDecoder().decode(base64EncodedKey);
        SecretKey key = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
        JWEObject jwe = JWEObject.parse(content);
        jwe.decrypt(new AESDecrypter(key));

        ObjectMapper objectMapper = new ObjectMapper();
        ObjectReader reader = objectMapper.readerFor(Map.class);
        return reader.with(DeserializationFeature.USE_LONG_FOR_INTS)
                .readValue(jwe.getPayload().toString());
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

}
 
源代码16 项目: nexus-public   文件: JacksonMarshaller.java
@Override
public <T> T unmarshall(final Object marshalled, final Class<T> type) throws Exception {
  checkNotNull(marshalled);
  checkState(marshalled instanceof Map, "Marshalled data must be a Map; found: %s", marshalled.getClass());

  // FIXME: This allows the top-level object to be created, but if any children objects of this are missing
  // FIXME: ... no-arg CTOR then Jackson will fail to construct them.
  // FIXME: Is there any way to configure the basic instance creation for Jackson?
  Object value = instanceCreator.newInstance(type);

  // performs same basic logic as ObjectMapper.convertValue(Object, Class) helper
  ObjectReader reader = objectMapper.readerForUpdating(value);
  TokenBuffer buff = new TokenBuffer(objectMapper, false);
  objectMapper.writeValue(buff, marshalled);
  reader.readValue(buff.asParser());

  return type.cast(value);
}
 
源代码17 项目: crnk-framework   文件: JsonMetaInformation.java
protected static <T> T 	createInterfaceJsonAdapter(Class<T> interfaceClass, JsonNode data, final ObjectMapper mapper) {
	Class[] interfaces = new Class[] { interfaceClass };
	return (T) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), interfaces, new InvocationHandler() {
		@Override
		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
			if (method.getDeclaringClass().equals(Object.class)) {
				throw new UnsupportedOperationException("not implemented");
			}

			String name = ClassUtils.getGetterFieldName(method);
			JsonNode jsonNode = data.get(name);
			if(jsonNode != null) {
				Class<?> returnType = method.getReturnType();
				ObjectReader objectReader = mapper.readerFor(returnType);
				return objectReader.readValue(jsonNode);
			}
			return null;
		}
	});
}
 
源代码18 项目: katharsis-framework   文件: ClientResourceUpsert.java
protected void setMeta(Resource dataBody, Object instance, ResourceInformation resourceInformation) {
	ResourceField metaField = resourceInformation.getMetaField();
	if (dataBody.getMeta() != null && metaField != null) {
		JsonNode metaNode = dataBody.getMeta();

		Class<?> metaClass = metaField.getType();

		ObjectReader metaMapper = objectMapper.readerFor(metaClass);
		try {
			Object meta = metaMapper.readValue(metaNode);
			PropertyUtils.setProperty(instance, metaField.getUnderlyingName(), meta);
		} catch (IOException e) {
			throw new ResponseBodyException("failed to parse links information", e);
		}

	}
}
 
源代码19 项目: crnk-framework   文件: HomeModuleTest.java
@Test
public void checkUrlFilteringForRoot() throws IOException {
	// add filter to include additional parameter `test`
	JsonApiUrlBuilder urlBuilder = (JsonApiUrlBuilder) boot.getUrlBuilder();
	urlBuilder.addPropagatedParameter("test");

	// e.g. /api/tasks/history/
	HttpRequestContextBase context = Mockito.mock(HttpRequestContextBase.class);
	Mockito.when(context.getMethod()).thenReturn("GET");
	Mockito.when(context.getPath()).thenReturn("/");
	Map<String, Set<String>> parameters = new HashMap<>();
	parameters.put("test", Sets.newHashSet("foo"));
	Mockito.when(context.getRequestParameters()).thenReturn(parameters);
	Mockito.when(context.getRequestHeader(Mockito.eq(HttpHeaders.HTTP_HEADER_ACCEPT))).thenReturn(HttpHeaders.JSON_CONTENT_TYPE);
	HttpRequestContextBaseAdapter contextAdapter = new HttpRequestContextBaseAdapter(context);

	HttpRequestDispatcherImpl requestDispatcher = boot.getRequestDispatcher();
	HttpResponse response = requestDispatcher.process(contextAdapter).get().get();

	ObjectReader reader = boot.getObjectMapper().readerFor(Document.class);
	String body = new String(response.getBody());
	Assert.assertTrue(body.contains("projects?test=foo"));
}
 
源代码20 项目: jackson-modules-java8   文件: DurationDeserTest.java
@Test
public void testLenientDeserializeFromEmptyString() throws Exception {

    String key = "duration";
    ObjectMapper mapper = newMapper();
    ObjectReader objectReader = mapper.readerFor(MAP_TYPE_REF);

    String dateValAsNullStr = null;
    String dateValAsEmptyStr = "";

    String valueFromNullStr = mapper.writeValueAsString(asMap(key, dateValAsNullStr));
    Map<String, Duration> actualMapFromNullStr = objectReader.readValue(valueFromNullStr);
    Duration actualDateFromNullStr = actualMapFromNullStr.get(key);
    assertNull(actualDateFromNullStr);

    String valueFromEmptyStr = mapper.writeValueAsString(asMap(key, dateValAsEmptyStr));
    Map<String, Duration> actualMapFromEmptyStr = objectReader.readValue(valueFromEmptyStr);
    Duration actualDateFromEmptyStr = actualMapFromEmptyStr.get(key);
    assertEquals("empty string failed to deserialize to null with lenient setting", null, actualDateFromEmptyStr);
}
 
源代码21 项目: native-navigation   文件: JacksonUtils.java
/** Convenient way to read a JSON Array String into a List */
public static <T> List<T> readJsonArray(ObjectMapper objectMapper, String value) {
  ObjectReader reader = JacksonUtils.readerForType(objectMapper, List.class);
  //noinspection OverlyBroadCatchBlock
  try {
    return reader.readValue(value);
  } catch (IOException e) {
    throw new RuntimeException(e);
  }
}
 
源代码22 项目: java-client-api   文件: JacksonCSVSplitter.java
private ObjectReader configureObjReader() {
    this.count=0;
    CsvSchema firstLineSchema = getCsvSchema()!=null? getCsvSchema():CsvSchema.emptySchema().withHeader();
    CsvMapper csvMapper = getCsvMapper()!=null ? getCsvMapper() : configureCsvMapper();
    ObjectReader objectReader = csvMapper.readerFor(JsonNode.class);
    
    return objectReader.with(firstLineSchema);
}
 
源代码23 项目: jackson-modules-java8   文件: LocalDateDeserTest.java
private void expectFailure(ObjectReader reader, String json) throws Throwable {
    try {
        reader.readValue(aposToQuotes(json));
        fail("expected DateTimeParseException");
    } catch (JsonProcessingException e) {
        if (e.getCause() == null) {
            throw e;
        }
        if (!(e.getCause() instanceof DateTimeParseException)) {
            throw e.getCause();
        }
    }
}
 
@Test
public void createFromJSONPredictionsOnly() throws JsonProcessingException, IOException
{
	String json = "{\"predictions\":[{\"predictedClass\":\"cl1\",\"prediction\":1.0,\"confidence\":0.9}]}";
	ObjectMapper mapper = new ObjectMapper();
	ObjectReader reader = mapper.reader(PredictionServiceResult.class);
	PredictionServiceResult res = reader.readValue(json);
	Assert.assertNotNull(res);
	Assert.assertEquals(1.0, res.predictions.get(0).prediction);
}
 
源代码25 项目: feign-reactive   文件: JettyReactiveHttpResponse.java
JettyReactiveHttpResponse(Response clientResponse, Publisher<ContentChunk> contentChunks,
						  Class returnPublisherType, Class returnActualClass,
						  JsonFactory jsonFactory, ObjectReader objectReader) {
	this.clientResponse = clientResponse;
	this.contentChunks = contentChunks;
	this.returnPublisherType = returnPublisherType;
	this.returnActualClass = returnActualClass;
	this.objectReader = objectReader;
	this.jsonFactory = jsonFactory;
}
 
源代码26 项目: datawave   文件: RemoteAccumuloService.java
protected <T> T execGet(String suffix, ObjectReader reader) {
    // @formatter:off
    return executeGetMethodWithRuntimeException(
            suffix,
            uriBuilder -> {},
            httpGet -> {
                httpGet.setHeader(AUTH_HEADER_NAME, getBearer());
                httpGet.setHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
            },
            entity -> reader.readValue(entity.getContent()),
            () -> StringUtils.isEmpty(suffix) ? serviceURI() : suffix
    );
    // @formatter:on
}
 
/**
 * @return {@code com.fasterxml.jackson.databind.ObjectReader} to deserialize {@link BufferedBulkResult}
 */
protected ObjectReader configuredReader() {
    return new ObjectMapper()
            .setVisibility(VisibilityChecker.Std.defaultInstance().with(JsonAutoDetect.Visibility.ANY))
            .setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
            .configure(SerializationFeature.CLOSE_CLOSEABLE, false)
            .configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
            .addMixIn(BufferedBulkResult.class, BufferedBulkResultMixIn.class)
            .addMixIn(BulkError.class, BulkErrorMixIn.class)
            .addMixIn(BulkResultItem.class, BulkResultItemMixIn.class)
            .readerFor(BufferedBulkResult.class);
}
 
源代码28 项目: n2o-framework   文件: N2oConfigBuilder.java
@Override
public ConfigBuilder<T> read(String content) {
    String json = resolvePlaceholders(content);
    try {
        if (appConfig != null) {
            ObjectReader merger = objectMapper.readerForUpdating(appConfig);
            appConfig = merger.readValue(json);
        } else {
            appConfig = objectMapper.readValue(json, appConfigType);
        }
    } catch (IOException e) {
        throw new IllegalStateException(e);
    }
    return this;
}
 
源代码29 项目: quarkus   文件: KnativeEventsBindingRecorder.java
public void init() {
    typeTriggers = new HashMap<>();
    objectMapper = getObjectMapper()
            .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
            .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
    for (FunctionInvoker invoker : FunctionRecorder.registry.invokers()) {
        Method method = invoker.getMethod();
        CloudEventMapping annotation = method.getAnnotation(CloudEventMapping.class);
        if (annotation != null && !annotation.trigger().isEmpty()) {
            typeTriggers.put(annotation.trigger(), invoker);
        } else {
            typeTriggers.put(invoker.getName(), invoker);
        }

        if (invoker.hasInput()) {
            ObjectReader reader = objectMapper.readerFor(invoker.getInputType());
            invoker.getBindingContext().put(ObjectReader.class.getName(), reader);
        }
        if (invoker.hasOutput()) {
            ObjectWriter writer = objectMapper.writerFor(invoker.getOutputType());
            invoker.getBindingContext().put(ObjectWriter.class.getName(), writer);

            String functionName = invoker.getName();
            if (annotation != null && !annotation.responseType().isEmpty()) {
                invoker.getBindingContext().put(RESPONSE_TYPE, annotation.responseType());
            } else {
                invoker.getBindingContext().put(RESPONSE_TYPE, functionName + ".output");
            }
            if (annotation != null && !annotation.responseSource().isEmpty()) {
                invoker.getBindingContext().put(RESPONSE_SOURCE, annotation.responseSource());
            } else {
                invoker.getBindingContext().put(RESPONSE_SOURCE, functionName);
            }
        }
    }
}
 
源代码30 项目: quarkus   文件: FunqyLambdaBindingRecorder.java
public void init(BeanContainer bc) {
    beanContainer = bc;
    FunctionConstructor.CONTAINER = bc;
    ObjectMapper objectMapper = AmazonLambdaMapperRecorder.objectMapper;
    for (FunctionInvoker invoker : FunctionRecorder.registry.invokers()) {
        if (invoker.hasInput()) {
            ObjectReader reader = objectMapper.readerFor(invoker.getInputType());
            invoker.getBindingContext().put(ObjectReader.class.getName(), reader);
        }
        if (invoker.hasOutput()) {
            ObjectWriter writer = objectMapper.writerFor(invoker.getOutputType());
            invoker.getBindingContext().put(ObjectWriter.class.getName(), writer);
        }
    }
}
 
 同包方法