• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zalando / jackson-datatype-money / #2246

pending completion
#2246

push

web-flow
Bump maven-compiler-plugin from 3.10.1 to 3.11.0 (#437)

Bumps [maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.10.1 to 3.11.0.
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.10.1...maven-compiler-plugin-3.11.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

142 of 142 relevant lines covered (100.0%)

1.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/main/java/org/zalando/jackson/datatype/money/MonetaryAmountSerializer.java
1
package org.zalando.jackson.datatype.money;
2

3
import com.fasterxml.jackson.core.JsonGenerator;
4
import com.fasterxml.jackson.databind.JavaType;
5
import com.fasterxml.jackson.databind.JsonMappingException;
6
import com.fasterxml.jackson.databind.JsonSerializer;
7
import com.fasterxml.jackson.databind.SerializerProvider;
8
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
9
import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor;
10
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
11
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
12
import com.fasterxml.jackson.databind.util.NameTransformer;
13

14
import javax.annotation.Nullable;
15
import javax.money.CurrencyUnit;
16
import javax.money.MonetaryAmount;
17
import javax.money.format.MonetaryAmountFormat;
18
import java.io.IOException;
19
import java.util.Locale;
20

21
final class MonetaryAmountSerializer extends StdSerializer<MonetaryAmount> {
22

23
    private final FieldNames names;
24
    private final AmountWriter<?> writer;
25
    private final MonetaryAmountFormatFactory factory;
26
    private final boolean isUnwrapping;
27
    private final NameTransformer nameTransformer;
28

29
    MonetaryAmountSerializer(final FieldNames names, final AmountWriter<?> writer,
30
            final MonetaryAmountFormatFactory factory, boolean isUnwrapping, @Nullable final NameTransformer nameTransformer) {
31
        super(MonetaryAmount.class);
1✔
32
        this.writer = writer;
1✔
33
        this.factory = factory;
1✔
34
        this.names = names;
1✔
35
        this.isUnwrapping = isUnwrapping;
1✔
36
        this.nameTransformer = nameTransformer;
1✔
37
    }
1✔
38

39
    MonetaryAmountSerializer(final FieldNames names, final AmountWriter<?> writer,
40
            final MonetaryAmountFormatFactory factory) {
41
        this(names, writer, factory, false, null);
1✔
42
    }
1✔
43

44
    @Override
45
    public void acceptJsonFormatVisitor(final JsonFormatVisitorWrapper wrapper, final JavaType hint)
46
            throws JsonMappingException {
47

48
        @Nullable final JsonObjectFormatVisitor visitor = wrapper.expectObjectFormat(hint);
1✔
49

50
        if (visitor == null) {
1✔
51
            return;
1✔
52
        }
53

54
        final SerializerProvider provider = wrapper.getProvider();
1✔
55

56
        visitor.property(names.getAmount(),
1✔
57
                provider.findValueSerializer(writer.getType()),
1✔
58
                provider.constructType(writer.getType()));
1✔
59

60
        visitor.property(names.getCurrency(),
1✔
61
                provider.findValueSerializer(CurrencyUnit.class),
1✔
62
                provider.constructType(CurrencyUnit.class));
1✔
63

64
        visitor.optionalProperty(names.getFormatted(),
1✔
65
                provider.findValueSerializer(String.class),
1✔
66
                provider.constructType(String.class));
1✔
67
    }
1✔
68

69
    @Override
70
    public void serializeWithType(final MonetaryAmount value, final JsonGenerator generator,
71
            final SerializerProvider provider, final TypeSerializer serializer) throws IOException {
72

73
        // effectively assuming no type information at all
74
        serialize(value, generator, provider);
1✔
75
    }
1✔
76

77
    @Override
78
    public void serialize(final MonetaryAmount value, final JsonGenerator json, final SerializerProvider provider)
79
            throws IOException {
80

81
        final CurrencyUnit currency = value.getCurrency();
1✔
82
        @Nullable final String formatted = format(value, provider);
1✔
83

84
        if (!isUnwrapping) {
1✔
85
            json.writeStartObject();
1✔
86
        }
87

88
        {
89
            provider.defaultSerializeField(transformName(names.getAmount()), writer.write(value), json);
1✔
90
            provider.defaultSerializeField(transformName(names.getCurrency()), currency, json);
1✔
91

92
            if (formatted != null) {
1✔
93
                provider.defaultSerializeField(transformName(names.getFormatted()), formatted, json);
1✔
94
            }
95
        }
96

97
        if (!isUnwrapping) {
1✔
98
            json.writeEndObject();
1✔
99
        }
100
    }
1✔
101

102
    private String transformName(String name) {
103
        return (nameTransformer != null) ? nameTransformer.transform(name) : name;
1✔
104
    }
105

106
    @Nullable
107
    private String format(final MonetaryAmount value, final SerializerProvider provider) {
108
        final Locale locale = provider.getConfig().getLocale();
1✔
109
        final MonetaryAmountFormat format = factory.create(locale);
1✔
110
        return format == null ? null : format.format(value);
1✔
111
    }
112

113
    @Override
114
    public boolean isUnwrappingSerializer() {
115
        return isUnwrapping;
1✔
116
    }
117

118
    @Override
119
    public JsonSerializer<MonetaryAmount> unwrappingSerializer(@Nullable final NameTransformer nameTransformer) {
120
        return new MonetaryAmountSerializer(names, writer, factory, true, nameTransformer);
1✔
121
    }
122
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc