diff --git a/CHANGELOG.md b/CHANGELOG.md index c9af60e5..b0ebb039 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 21067339..00000000 --- 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 02a31f94..2e653201 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 eaeb0c87..923023b9 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 7397c36a..169d1e2a 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 76ae7ecf..a33717d2 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 e6aca28e..a9e64f65 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 58b65fe7..06c956f7 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 648a89f3..364c9bc6 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 ef0aba8a..81b12987 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 ca9e7807..700c025f 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 a7d602d5..b96bceb7 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 f48a2bb4..4d66c694 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 e12a9c1c..3bc9f2d5 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 2b816cd8..0330fcdf 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,