Чтобы избежать проверки типов, можно ли вызывать ObjectMapper.writeValueAsString (Object), передавая аргумент String - PullRequest
0 голосов
/ 02 мая 2020

Плохо ли, если я использую String ObjectMapper.writeValueAsString(Object value), когда мой объект значения может быть либо String, либо объектом MyClass (содержащим JsonNode). У меня есть метод, который использует дженерики и возвращает либо String, либо MyClass объект, который я хочу сериализовать в строку и хочу избежать проверки типа.

По сути, хотите знать, что вызов String ObjectMapper.writeValueAsString(Object) путем передачи аргумента String неверен?

Я использую jackson-databind-2.9.9.jar и ссылаюсь на com.fasterxml.jackson.databind.JsonNode и com.fasterxml.jackson.databind.ObjectMapper.

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyClass {
  private String id;
  private JsonNode data;

  @JsonProperty("data")
  public JsonNode getData() {
    return data;
  }

  public void setData(JsonNode data) {
    this.data = data;
  }

  @JsonProperty("id")
  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }
}

В настоящее время я делаю это и хочу этого избежать:

T value = someMethod();
if (value instanceof String) {
  valueString = (String) value;
} else {
  valueString = mapper.writeValueAsString(value);
}

, где T может быть String или MyClass.

...