Java tutorial
/* * Copyright 2017 IBM Corp. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ package com.ibm.watson.developer_cloud.discovery.v1.model.common; import java.io.IOException; import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParseException; import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory; import com.google.gson.internal.LazilyParsedNumber; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; /** * Override the default {@link LazilyParsedNumber} for parsing {@link Number}s. */ public class EagerNumberAdapterFactory implements TypeAdapterFactory { @SuppressWarnings("unchecked") @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { if (!Number.class.isAssignableFrom(typeToken.getRawType())) { return null; } return (TypeAdapter<T>) new NumberTypeAdapter(); } private class NumberTypeAdapter extends TypeAdapter<Number> { private final NumberFormat numberFormat = new DecimalFormat(); @Override public void write(JsonWriter out, Number value) throws IOException { out.value(numberFormat.format(value)); } @Override public Number read(JsonReader in) throws IOException { try { return numberFormat.parse(in.nextString()); } catch (ParseException e) { throw new IOException("Not a number", e); } } } }