From 84904688c4c6d7071b71e90f3187dd089ec46554 Mon Sep 17 00:00:00 2001 From: William Storey Date: Fri, 26 Sep 2025 19:53:16 +0000 Subject: [PATCH] Remove JsonInjector class This was not doing much given we always passed IP and network as null. In the past, when we used Jackson for MMDB deserialization, this was more extensively used. --- CHANGELOG.md | 3 ++ .../java/com/maxmind/geoip2/JsonInjector.java | 38 ------------------- .../com/maxmind/geoip2/WebServiceClient.java | 3 +- .../geoip2/model/AnonymousIpResponse.java | 4 +- .../geoip2/model/AnonymousPlusResponse.java | 4 +- .../com/maxmind/geoip2/model/AsnResponse.java | 4 +- .../maxmind/geoip2/model/CityResponse.java | 2 +- .../geoip2/model/ConnectionTypeResponse.java | 4 +- .../maxmind/geoip2/model/CountryResponse.java | 2 +- .../maxmind/geoip2/model/DomainResponse.java | 4 +- .../geoip2/model/EnterpriseResponse.java | 2 +- .../geoip2/model/InsightsResponse.java | 2 +- .../maxmind/geoip2/model/IpRiskResponse.java | 4 +- .../com/maxmind/geoip2/model/IspResponse.java | 4 +- .../com/maxmind/geoip2/record/Traits.java | 4 +- 15 files changed, 25 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/com/maxmind/geoip2/JsonInjector.java diff --git a/CHANGELOG.md b/CHANGELOG.md index c9af60e58..b0ebb0390 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,9 @@ CHANGELOG * **BREAKING:** Java 11 support has been dropped. Java 17 or later is now required. * **BREAKING:** Removed explicit `serialVersionUID` from all exception classes. Java will auto-generate serialVersionUID when needed, following modern practices. +* **BREAKING:** Removed no longer necessary `JacksonInject` annotations for + `ip_address`, `network`, and `traits` from several classes. The + `JsonInjector` class was removed. 4.4.0 (2025-08-28) ------------------ diff --git a/src/main/java/com/maxmind/geoip2/JsonInjector.java b/src/main/java/com/maxmind/geoip2/JsonInjector.java deleted file mode 100644 index 21067339b..000000000 --- a/src/main/java/com/maxmind/geoip2/JsonInjector.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.maxmind.geoip2; - -import com.fasterxml.jackson.databind.BeanProperty; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.InjectableValues; -import com.maxmind.db.Network; -import com.maxmind.geoip2.record.Traits; -import java.util.List; - -class JsonInjector extends InjectableValues { - private final List locales; - private final String ip; - private final Network network; - - public JsonInjector(List locales, String ip, Network network) { - this.locales = locales; - this.ip = ip; - this.network = network; - } - - @Override - public Object findInjectableValue(Object valueId, DeserializationContext ctxt, - BeanProperty forProperty, Object beanInstance) { - if ("locales".equals(valueId)) { - return locales; - } - if ("ip_address".equals(valueId)) { - return ip; - } - if ("network".equals(valueId)) { - return network; - } - if ("traits".equals(valueId)) { - return new Traits(ip, network); - } - return null; - } -} \ No newline at end of file diff --git a/src/main/java/com/maxmind/geoip2/WebServiceClient.java b/src/main/java/com/maxmind/geoip2/WebServiceClient.java index 02a31f94b..2e653201f 100644 --- a/src/main/java/com/maxmind/geoip2/WebServiceClient.java +++ b/src/main/java/com/maxmind/geoip2/WebServiceClient.java @@ -397,7 +397,8 @@ private T handleResponse(HttpResponse response, Class cls) + status + ") for " + uri, status, uri); } - InjectableValues inject = new JsonInjector(locales, null, null); + InjectableValues inject = new InjectableValues.Std() + .addValue("locales", locales); try { return mapper.readerFor(cls).with(inject).readValue(response.body()); diff --git a/src/main/java/com/maxmind/geoip2/model/AnonymousIpResponse.java b/src/main/java/com/maxmind/geoip2/model/AnonymousIpResponse.java index eaeb0c87b..923023b98 100644 --- a/src/main/java/com/maxmind/geoip2/model/AnonymousIpResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/AnonymousIpResponse.java @@ -26,14 +26,14 @@ public class AnonymousIpResponse extends IpBaseResponse { * @param network the network associated with the record */ public AnonymousIpResponse( - @JacksonInject("ip_address") @JsonProperty("ip_address") String ipAddress, + @JsonProperty("ip_address") String ipAddress, @JsonProperty("is_anonymous") boolean isAnonymous, @JsonProperty("is_anonymous_vpn") boolean isAnonymousVpn, @JsonProperty("is_hosting_provider") boolean isHostingProvider, @JsonProperty("is_public_proxy") boolean isPublicProxy, @JsonProperty("is_residential_proxy") boolean isResidentialProxy, @JsonProperty("is_tor_exit_node") boolean isTorExitNode, - @JacksonInject("network") @JsonProperty("network") + @JsonProperty("network") @JsonDeserialize(using = NetworkDeserializer.class) Network network ) { super(ipAddress, isAnonymous, isAnonymousVpn, isHostingProvider, isPublicProxy, diff --git a/src/main/java/com/maxmind/geoip2/model/AnonymousPlusResponse.java b/src/main/java/com/maxmind/geoip2/model/AnonymousPlusResponse.java index 7397c36ad..169d1e2a8 100644 --- a/src/main/java/com/maxmind/geoip2/model/AnonymousPlusResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/AnonymousPlusResponse.java @@ -34,14 +34,14 @@ public class AnonymousPlusResponse extends AnonymousIpResponse { */ public AnonymousPlusResponse( @JsonProperty("anonymizer_confidence") Integer anonymizerConfidence, - @JacksonInject("ip_address") @JsonProperty("ip_address") String ipAddress, + @JsonProperty("ip_address") String ipAddress, @JsonProperty("is_anonymous") Boolean isAnonymous, @JsonProperty("is_anonymous_vpn") Boolean isAnonymousVpn, @JsonProperty("is_hosting_provider") Boolean isHostingProvider, @JsonProperty("is_public_proxy") Boolean isPublicProxy, @JsonProperty("is_residential_proxy") Boolean isResidentialProxy, @JsonProperty("is_tor_exit_node") Boolean isTorExitNode, - @JacksonInject("network") @JsonDeserialize(using = NetworkDeserializer.class) + @JsonDeserialize(using = NetworkDeserializer.class) @JsonProperty("network") Network network, @JsonProperty("network_last_seen") LocalDate networkLastSeen, @JsonProperty("provider_name") String providerName diff --git a/src/main/java/com/maxmind/geoip2/model/AsnResponse.java b/src/main/java/com/maxmind/geoip2/model/AsnResponse.java index 76ae7ecf9..a33717d26 100644 --- a/src/main/java/com/maxmind/geoip2/model/AsnResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/AsnResponse.java @@ -37,9 +37,9 @@ public AsnResponse( @JsonProperty("autonomous_system_organization") @MaxMindDbParameter(name = "autonomous_system_organization") String autonomousSystemOrganization, - @JacksonInject("ip_address") @JsonProperty("ip_address") + @JsonProperty("ip_address") @MaxMindDbParameter(name = "ip_address") String ipAddress, - @JacksonInject("network") @JsonProperty("network") + @JsonProperty("network") @JsonDeserialize(using = NetworkDeserializer.class) @MaxMindDbParameter(name = "network") Network network ) { diff --git a/src/main/java/com/maxmind/geoip2/model/CityResponse.java b/src/main/java/com/maxmind/geoip2/model/CityResponse.java index e6aca28e7..a9e64f65c 100644 --- a/src/main/java/com/maxmind/geoip2/model/CityResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/CityResponse.java @@ -53,7 +53,7 @@ public CityResponse( RepresentedCountry representedCountry, @JsonProperty("subdivisions") @MaxMindDbParameter(name = "subdivisions") ArrayList subdivisions, - @JacksonInject("traits") @JsonProperty("traits") @MaxMindDbParameter(name = "traits") + @JsonProperty("traits") @MaxMindDbParameter(name = "traits") Traits traits ) { super(city, continent, country, location, maxmind, postal, registeredCountry, diff --git a/src/main/java/com/maxmind/geoip2/model/ConnectionTypeResponse.java b/src/main/java/com/maxmind/geoip2/model/ConnectionTypeResponse.java index 58b65fe77..06c956f75 100644 --- a/src/main/java/com/maxmind/geoip2/model/ConnectionTypeResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/ConnectionTypeResponse.java @@ -79,8 +79,8 @@ public static ConnectionType fromString(String s) { */ public ConnectionTypeResponse( @JsonProperty("connection_type") ConnectionType connectionType, - @JacksonInject("ip_address") @JsonProperty("ip_address") String ipAddress, - @JacksonInject("network") @JsonProperty("network") + @JsonProperty("ip_address") String ipAddress, + @JsonProperty("network") @JsonDeserialize(using = NetworkDeserializer.class) Network network ) { this.connectionType = connectionType; diff --git a/src/main/java/com/maxmind/geoip2/model/CountryResponse.java b/src/main/java/com/maxmind/geoip2/model/CountryResponse.java index 648a89f3c..364c9bc60 100644 --- a/src/main/java/com/maxmind/geoip2/model/CountryResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/CountryResponse.java @@ -40,7 +40,7 @@ public CountryResponse( Country registeredCountry, @JsonProperty("represented_country") @MaxMindDbParameter(name = "represented_country") RepresentedCountry representedCountry, - @JacksonInject("traits") @JsonProperty("traits") @MaxMindDbParameter(name = "traits") + @JsonProperty("traits") @MaxMindDbParameter(name = "traits") Traits traits ) { super(continent, country, maxmind, registeredCountry, representedCountry, traits); diff --git a/src/main/java/com/maxmind/geoip2/model/DomainResponse.java b/src/main/java/com/maxmind/geoip2/model/DomainResponse.java index ef0aba8a5..81b12987d 100644 --- a/src/main/java/com/maxmind/geoip2/model/DomainResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/DomainResponse.java @@ -29,9 +29,9 @@ public class DomainResponse extends AbstractResponse { @MaxMindDbConstructor public DomainResponse( @JsonProperty("domain") @MaxMindDbParameter(name = "domain") String domain, - @JacksonInject("ip_address") @JsonProperty("ip_address") + @JsonProperty("ip_address") @MaxMindDbParameter(name = "ip_address") String ipAddress, - @JacksonInject("network") @JsonProperty("network") + @JsonProperty("network") @JsonDeserialize(using = NetworkDeserializer.class) @MaxMindDbParameter(name = "network") Network network ) { diff --git a/src/main/java/com/maxmind/geoip2/model/EnterpriseResponse.java b/src/main/java/com/maxmind/geoip2/model/EnterpriseResponse.java index ca9e7807a..700c025f7 100644 --- a/src/main/java/com/maxmind/geoip2/model/EnterpriseResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/EnterpriseResponse.java @@ -53,7 +53,7 @@ public EnterpriseResponse( RepresentedCountry representedCountry, @JsonProperty("subdivisions") @MaxMindDbParameter(name = "subdivisions") ArrayList subdivisions, - @JacksonInject("traits") @JsonProperty("traits") @MaxMindDbParameter(name = "traits") + @JsonProperty("traits") @MaxMindDbParameter(name = "traits") Traits traits ) { super(city, continent, country, location, maxmind, postal, registeredCountry, diff --git a/src/main/java/com/maxmind/geoip2/model/InsightsResponse.java b/src/main/java/com/maxmind/geoip2/model/InsightsResponse.java index a7d602d50..b96bceb7a 100644 --- a/src/main/java/com/maxmind/geoip2/model/InsightsResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/InsightsResponse.java @@ -45,7 +45,7 @@ public InsightsResponse( @JsonProperty("registered_country") Country registeredCountry, @JsonProperty("represented_country") RepresentedCountry representedCountry, @JsonProperty("subdivisions") List subdivisions, - @JacksonInject("traits") @JsonProperty("traits") Traits traits + @JsonProperty("traits") Traits traits ) { super(city, continent, country, location, maxmind, postal, registeredCountry, representedCountry, subdivisions, traits); diff --git a/src/main/java/com/maxmind/geoip2/model/IpRiskResponse.java b/src/main/java/com/maxmind/geoip2/model/IpRiskResponse.java index f48a2bb4e..4d66c6942 100644 --- a/src/main/java/com/maxmind/geoip2/model/IpRiskResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/IpRiskResponse.java @@ -30,14 +30,14 @@ public class IpRiskResponse extends IpBaseResponse { * @param ipRisk the IP risk of a model */ public IpRiskResponse( - @JacksonInject("ip_address") @JsonProperty("ip_address") String ipAddress, + @JsonProperty("ip_address") String ipAddress, @JsonProperty("is_anonymous") boolean isAnonymous, @JsonProperty("is_anonymous_vpn") boolean isAnonymousVpn, @JsonProperty("is_hosting_provider") boolean isHostingProvider, @JsonProperty("is_public_proxy") boolean isPublicProxy, @JsonProperty("is_residential_proxy") boolean isResidentialProxy, @JsonProperty("is_tor_exit_node") boolean isTorExitNode, - @JacksonInject("network") @JsonProperty("network") + @JsonProperty("network") @JsonDeserialize(using = NetworkDeserializer.class) Network network, @JsonProperty("ip_risk") double ipRisk ) { diff --git a/src/main/java/com/maxmind/geoip2/model/IspResponse.java b/src/main/java/com/maxmind/geoip2/model/IspResponse.java index e12a9c1cf..3bc9f2d51 100644 --- a/src/main/java/com/maxmind/geoip2/model/IspResponse.java +++ b/src/main/java/com/maxmind/geoip2/model/IspResponse.java @@ -40,7 +40,7 @@ public IspResponse( @JsonProperty("autonomous_system_organization") @MaxMindDbParameter(name = "autonomous_system_organization") String autonomousSystemOrganization, - @JacksonInject("ip_address") @JsonProperty("ip_address") + @JsonProperty("ip_address") @MaxMindDbParameter(name = "ip_address") String ipAddress, @JsonProperty("isp") @MaxMindDbParameter(name = "isp") String isp, @JsonProperty("mobile_country_code") @MaxMindDbParameter(name = "mobile_country_code") @@ -49,7 +49,7 @@ public IspResponse( String mobileNetworkCode, @JsonProperty("organization") @MaxMindDbParameter(name = "organization") String organization, - @JacksonInject("network") @JsonProperty("network") + @JsonProperty("network") @JsonDeserialize(using = NetworkDeserializer.class) @MaxMindDbParameter(name = "network") Network network ) { diff --git a/src/main/java/com/maxmind/geoip2/record/Traits.java b/src/main/java/com/maxmind/geoip2/record/Traits.java index 2b816cd84..0330fcdf6 100644 --- a/src/main/java/com/maxmind/geoip2/record/Traits.java +++ b/src/main/java/com/maxmind/geoip2/record/Traits.java @@ -91,7 +91,7 @@ public Traits( @JsonProperty("autonomous_system_organization") String autonomousSystemOrganization, @JsonProperty("connection_type") ConnectionType connectionType, @JsonProperty("domain") String domain, - @JacksonInject("ip_address") @JsonProperty("ip_address") String ipAddress, + @JsonProperty("ip_address") String ipAddress, @JsonProperty("is_anonymous") boolean isAnonymous, @JsonProperty("is_anonymous_vpn") boolean isAnonymousVpn, @JsonProperty("is_anycast") boolean isAnycast, @@ -103,7 +103,7 @@ public Traits( @JsonProperty("isp") String isp, @JsonProperty("mobile_country_code") String mobileCountryCode, @JsonProperty("mobile_network_code") String mobileNetworkCode, - @JacksonInject("network") @JsonProperty("network") + @JsonProperty("network") @JsonDeserialize(using = NetworkDeserializer.class) Network network, @JsonProperty("organization") String organization, @JsonProperty("user_type") String userType,