1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.beanutils.converters; 18 19 /** 20 * {@link org.apache.commons.beanutils.Converter} 21 * implementation that converts an incoming 22 * object into a <code>java.lang.String</code> object. 23 * <p> 24 * Note that ConvertUtils really is designed to do string->object conversions, 25 * and offers very little support for object->string conversions. The 26 * ConvertUtils/ConvertUtilsBean methods only select a converter to apply 27 * based upon the target type being converted to, and generally assume that 28 * the input is a string (by calling its toString method if needed). 29 * <p> 30 * This class is therefore just a dummy converter that converts its input 31 * into a string by calling the input object's toString method and returning 32 * that value. 33 * <p> 34 * It is possible to replace this converter with something that has a big 35 * if/else statement that selects behaviour based on the real type of the 36 * object being converted (or possibly has a map of converters, and looks 37 * them up based on the class of the input object). However this is not part 38 * of the existing ConvertUtils framework. 39 * 40 * 41 * @version $Id$ 42 * @since 1.3 43 */ 44 public final class StringConverter extends AbstractConverter { 45 46 47 /** 48 * Construct a <b>java.lang.String</b> <i>Converter</i> that throws 49 * a <code>ConversionException</code> if an error occurs. 50 */ 51 public StringConverter() { 52 super(); 53 } 54 55 /** 56 * Construct a <b>java.lang.String</b> <i>Converter</i> that returns 57 * a default value if an error occurs. 58 * 59 * @param defaultValue The default value to be returned 60 * if the value to be converted is missing or an error 61 * occurs converting the value. 62 */ 63 public StringConverter(final Object defaultValue) { 64 super(defaultValue); 65 } 66 67 /** 68 * Return the default type this <code>Converter</code> handles. 69 * 70 * @return The default type this <code>Converter</code> handles. 71 * @since 1.8.0 72 */ 73 @Override 74 protected Class<?> getDefaultType() { 75 return String.class; 76 } 77 78 /** 79 * Convert the specified input object into an output object of the 80 * specified type. 81 * 82 * @param <T> Target type of the conversion. 83 * @param type Data type to which this value should be converted. 84 * @param value The input value to be converted. 85 * @return The converted value. 86 * @throws Throwable if an error occurs converting to the specified type 87 * @since 1.8.0 88 */ 89 @Override 90 protected <T> T convertToType(final Class<T> type, final Object value) throws Throwable { 91 // We have to support Object, too, because this class is sometimes 92 // used for a standard to Object conversion 93 if (String.class.equals(type) || Object.class.equals(type)) { 94 return type.cast(value.toString()); 95 } 96 throw conversionException(type, value); 97 } 98 99 100 }