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 * https://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.beanutils2.converters;
18
19 /**
20 * {@link org.apache.commons.beanutils2.Converter} implementation that converts an incoming object into a {@link String} object.
21 * <p>
22 * Note that ConvertUtils really is designed to do string->object conversions, and offers very little support for object->string conversions. The
23 * ConvertUtils/ConvertUtilsBean methods only select a converter to apply based upon the target type being converted to, and generally assume that the input is
24 * a string (by calling its toString method if needed).
25 * <p>
26 * This class is therefore just a dummy converter that converts its input into a string by calling the input object's toString method and returning that value.
27 * <p>
28 * It is possible to replace this converter with something that has a big if/else statement that selects behavior based on the real type of the object being
29 * converted (or possibly has a map of converters, and looks them up based on the class of the input object). However this is not part of the existing
30 * ConvertUtils framework.
31 *
32 *
33 * @since 1.3
34 */
35 public final class StringConverter extends AbstractConverter<String> {
36
37 /**
38 * Constructs a <strong>java.lang.String</strong> <em>Converter</em> that throws a {@code ConversionException} if an error occurs.
39 */
40 public StringConverter() {
41 }
42
43 /**
44 * Constructs a <strong>java.lang.String</strong> <em>Converter</em> that returns a default value if an error occurs.
45 *
46 * @param defaultValue The default value to be returned if the value to be converted is missing or an error occurs converting the value.
47 */
48 public StringConverter(final String defaultValue) {
49 super(defaultValue);
50 }
51
52 /**
53 * Convert the specified input object into an output object of the specified type.
54 *
55 * @param <T> Target type of the conversion.
56 * @param type Data type to which this value should be converted.
57 * @param value The input value to be converted.
58 * @return The converted value.
59 * @throws Throwable if an error occurs converting to the specified type
60 * @since 1.8.0
61 */
62 @Override
63 protected <T> T convertToType(final Class<T> type, final Object value) throws Throwable {
64 // We have to support Object, too, because this class is sometimes
65 // used for a standard to Object conversion
66 if (String.class.equals(type) || Object.class.equals(type)) {
67 return type.cast(value.toString());
68 }
69 throw conversionException(type, value);
70 }
71
72 /**
73 * Gets the default type this {@code Converter} handles.
74 *
75 * @return The default type this {@code Converter} handles.
76 * @since 1.8.0
77 */
78 @Override
79 protected Class<String> getDefaultType() {
80 return String.class;
81 }
82
83 }