From d35b3e38cf0e176e3aa7426b8f9b63ec2779a28f Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 08:42:55 +0000 Subject: [PATCH] fix: correct query parameter serialization for request objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace `@JsonIgnore` with `@JsonProperty` on all getter methods across request classes so that optional query parameters are correctly serialized and sent to the server. Previously, fields annotated with `@JsonIgnore` were silently dropped during serialization, meaning pagination, filtering, and sorting parameters were never transmitted in API requests. Key changes: - `ListDatasetsRequest`: fix serialization of `page`, `page_size`, `search`, `latest_status`, `sort_by`, `sort_order`, `ownership` - `ListEntitiesInDatasetRequest` / `ListEntitiesRequest`: fix serialization of `page`, `page_size`, `search`, `status`, `entity_type`, `sort_by`, `sort_order` - `GetJobResultsRequest` / `GetUserJobsRequest`: fix serialization of `page`, `page_size`, `search`, `ownership` - `ListMonitorJobsRequest` / `ListMonitorsRequest`: fix serialization of `sort`, `page`, `page_size`, `search`, `ownership` 🌿 Generated with Fern --- .fern/metadata.json | 8 +- CONTRIBUTING.md | 114 ++++++++++++++++++ README.md | 17 ++- build.gradle | 4 +- changelog.md | 4 + reference.md | 2 + .../catchall/core/ClientOptions.java | 4 +- .../requests/ListDatasetsRequest.java | 16 +-- .../ListEntitiesInDatasetRequest.java | 16 +-- .../requests/ListEntitiesRequest.java | 16 +-- .../jobs/requests/GetJobResultsRequest.java | 6 +- .../jobs/requests/GetUserJobsRequest.java | 10 +- .../requests/ListMonitorJobsRequest.java | 4 +- .../requests/ListMonitorsRequest.java | 10 +- 14 files changed, 180 insertions(+), 51 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/.fern/metadata.json b/.fern/metadata.json index 1463dfc..343d6e0 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -1,16 +1,16 @@ { - "cliVersion": "4.90.0", + "cliVersion": "5.28.2", "generatorName": "fernapi/fern-java-sdk", - "generatorVersion": "4.4.1", + "generatorVersion": "4.8.10", "generatorConfig": { "publish-to": "central", "client-class-name": "CatchAllApi", "package-prefix": "com.newscatcher.catchall" }, - "originGitCommit": "3707beee5d0e236f2469e89f7b19c3a08efb6f95", + "originGitCommit": "f44434d1b1da5712ce6098d90232ec46cf645a0d", "originGitCommitIsDirty": true, "invokedBy": "ci", "requestedVersion": "AUTO", "ciProvider": "unknown", - "sdkVersion": "1.5.0" + "sdkVersion": "1.6.0" } \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..24cf9fa --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,114 @@ +# Contributing + +Thanks for your interest in contributing to this SDK! This document provides guidelines for contributing to the project. + +## Getting Started + +### Prerequisites + +- Java 11+ +- Gradle + +### Installation + +Install the project dependencies: + +```bash +./gradlew build +``` + +### Building + +Build the project: + +```bash +./gradlew build +``` + +### Testing + +Run the test suite: + +```bash +./gradlew test +``` + +### Formatting + +Check and fix code style: + +```bash +./gradlew spotlessApply +``` + +## About Generated Code + +**Important**: Most files in this SDK are automatically generated by [Fern](https://buildwithfern.com) from the API definition. Direct modifications to generated files will be overwritten the next time the SDK is generated. + +### Generated Files + +The following directories contain generated code: +- `src/` - API client classes and types +- Most Java files in the project + +### How to Customize + +If you need to customize the SDK, you have two options: + +#### Option 1: Use `.fernignore` + +For custom code that should persist across SDK regenerations: + +1. Create a `.fernignore` file in the project root +2. Add file patterns for files you want to preserve (similar to `.gitignore` syntax) +3. Add your custom code to those files + +Files listed in `.fernignore` will not be overwritten when the SDK is regenerated. + +For more information, see the [Fern documentation on custom code](https://buildwithfern.com/learn/sdks/overview/custom-code). + +#### Option 2: Contribute to the Generator + +If you want to change how code is generated for all users of this SDK: + +1. The Java SDK generator lives in the [Fern repository](https://github.com/fern-api/fern) +2. Generator code is located at `generators/java-v2/` +3. Follow the [Fern contributing guidelines](https://github.com/fern-api/fern/blob/main/CONTRIBUTING.md) +4. Submit a pull request with your changes to the generator + +This approach is best for: +- Bug fixes in generated code +- New features that would benefit all users +- Improvements to code generation patterns + +## Making Changes + +### Workflow + +1. Create a new branch for your changes +2. Make your modifications +3. Run tests to ensure nothing breaks: `./gradlew test` +4. Run formatting: `./gradlew spotlessApply` +5. Build the project: `./gradlew build` +6. Commit your changes with a clear commit message +7. Push your branch and create a pull request + +### Commit Messages + +Write clear, descriptive commit messages that explain what changed and why. + +### Code Style + +This project uses automated code formatting. Run `./gradlew spotlessApply` before committing to ensure your code meets the project's style guidelines. + +## Questions or Issues? + +If you have questions or run into issues: + +1. Check the [Fern documentation](https://buildwithfern.com) +2. Search existing [GitHub issues](https://github.com/fern-api/fern/issues) +3. Open a new issue if your question hasn't been addressed + +## License + +By contributing to this project, you agree that your contributions will be licensed under the same license as the project. diff --git a/README.md b/README.md index 3f9db05..f9b3675 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Add the dependency in your `build.gradle` file: ```groovy dependencies { - implementation 'com.newscatcherapi:newscatcher-catchall-sdk:1.5.0' + implementation 'com.newscatcherapi:newscatcher-catchall-sdk:1.6.0' } ``` @@ -47,7 +47,7 @@ Add the dependency in your `pom.xml` file: com.newscatcherapi newscatcher-catchall-sdk - 1.5.0 + 1.6.0 ``` @@ -157,11 +157,19 @@ retry limit (default: 2). Before defaulting to exponential backoff, the SDK will the `Retry-After` header (as either in seconds or as an HTTP date), and then the `X-RateLimit-Reset` header (as a Unix timestamp in epoch seconds); failing both of those, it will fall back to exponential backoff. -A request is deemed retryable when any of the following HTTP status codes is returned: +Which status codes are retried depends on the `retry-status-codes` generator configuration: +**`legacy`** (current default): retries on - [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout) - [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests) -- [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500) (Internal Server Errors) +- [5XX](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses) (All server errors, including 500) + +**`recommended`**: retries on +- [408](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/408) (Timeout) +- [429](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/429) (Too Many Requests) +- [502](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/502) (Bad Gateway) +- [503](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503) (Service Unavailable) +- [504](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/504) (Gateway Timeout) Use the `maxRetries` client option to configure this behavior. @@ -253,3 +261,4 @@ On the other hand, contributions to the README are always very welcome! + diff --git a/build.gradle b/build.gradle index ddafdb8..8313589 100644 --- a/build.gradle +++ b/build.gradle @@ -47,7 +47,7 @@ java { group = 'com.newscatcherapi' -version = '1.5.0' +version = '1.6.0' jar { dependsOn(":generatePomFileForMavenPublication") @@ -78,7 +78,7 @@ publishing { maven(MavenPublication) { groupId = 'com.newscatcherapi' artifactId = 'newscatcher-catchall-sdk' - version = '1.5.0' + version = '1.6.0' from components.java pom { name = 'newscatcher' diff --git a/changelog.md b/changelog.md index 69681fe..26e9ee0 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,7 @@ +## 1.6.0 - 2026-05-19 +### Changed +* **Request query parameter serialization** — optional fields on all list/filter request types (`ListDatasetsRequest`, `ListEntitiesRequest`, `ListEntitiesInDatasetRequest`, `GetJobResultsRequest`, `GetUserJobsRequest`, `ListMonitorJobsRequest`, `ListMonitorsRequest`) were previously annotated with `@JsonIgnore` and silently dropped during serialization; they are now correctly annotated with `@JsonProperty` and transmitted as query parameters. Pagination (`page`, `page_size`), filtering (`search`, `status`, `ownership`, etc.), and sorting (`sort_by`, `sort_order`) fields now work as expected. + ## 1.5.0 - 2026-04-23 * ## [1.5.0] - 2025 ### Added diff --git a/reference.md b/reference.md index c3d7eb9..2a9f2f6 100644 --- a/reference.md +++ b/reference.md @@ -2004,6 +2004,7 @@ Use semicolons (`;`) to separate multiple values in `alternative_names` and `key ```java client.datasets().createDatasetFromCsv( + null, CreateDatasetFromCsvRequest .builder() .name("name") @@ -2577,6 +2578,7 @@ endpoint since the dataset already exists. ```java client.datasets().uploadCsvToDataset( "ccabb755-afc2-4047-b84c-78d1f23d49b2", + null, UploadCsvToDatasetRequest .builder() .build() diff --git a/src/main/java/com/newscatcher/catchall/core/ClientOptions.java b/src/main/java/com/newscatcher/catchall/core/ClientOptions.java index 032e1db..55e36e3 100644 --- a/src/main/java/com/newscatcher/catchall/core/ClientOptions.java +++ b/src/main/java/com/newscatcher/catchall/core/ClientOptions.java @@ -38,10 +38,10 @@ private ClientOptions( this.headers.putAll(headers); this.headers.putAll(new HashMap() { { - put("User-Agent", "com.newscatcherapi:newscatcher-catchall-sdk/1.5.0"); + put("User-Agent", "com.newscatcherapi:newscatcher-catchall-sdk/1.6.0"); put("X-Fern-Language", "JAVA"); put("X-Fern-SDK-Name", "com.newscatcher.fern:api-sdk"); - put("X-Fern-SDK-Version", "1.5.0"); + put("X-Fern-SDK-Version", "1.6.0"); } }); this.headerSuppliers = headerSuppliers; diff --git a/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListDatasetsRequest.java b/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListDatasetsRequest.java index a8f0bb5..124f110 100644 --- a/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListDatasetsRequest.java +++ b/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListDatasetsRequest.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -62,7 +62,7 @@ private ListDatasetsRequest( /** * @return Page number to retrieve. */ - @JsonIgnore + @JsonProperty("page") public Optional getPage() { return page; } @@ -70,7 +70,7 @@ public Optional getPage() { /** * @return Number of datasets per page. */ - @JsonIgnore + @JsonProperty("page_size") public Optional getPageSize() { return pageSize; } @@ -78,7 +78,7 @@ public Optional getPageSize() { /** * @return Filter datasets by name (case-insensitive substring match). */ - @JsonIgnore + @JsonProperty("search") public Optional getSearch() { return search; } @@ -86,17 +86,17 @@ public Optional getSearch() { /** * @return Filter by dataset status. */ - @JsonIgnore + @JsonProperty("latest_status") public Optional getLatestStatus() { return latestStatus; } - @JsonIgnore + @JsonProperty("sort_by") public Optional getSortBy() { return sortBy; } - @JsonIgnore + @JsonProperty("sort_order") public Optional getSortOrder() { return sortOrder; } @@ -104,7 +104,7 @@ public Optional getSortOrder() { /** * @return Filter results by ownership. Defaults to all. */ - @JsonIgnore + @JsonProperty("ownership") public Optional getOwnership() { return ownership; } diff --git a/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListEntitiesInDatasetRequest.java b/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListEntitiesInDatasetRequest.java index 03edb9b..da48b1d 100644 --- a/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListEntitiesInDatasetRequest.java +++ b/src/main/java/com/newscatcher/catchall/resources/datasets/requests/ListEntitiesInDatasetRequest.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -62,7 +62,7 @@ private ListEntitiesInDatasetRequest( /** * @return Page number to retrieve. */ - @JsonIgnore + @JsonProperty("page") public Optional getPage() { return page; } @@ -70,7 +70,7 @@ public Optional getPage() { /** * @return Number of entities per page. */ - @JsonIgnore + @JsonProperty("page_size") public Optional getPageSize() { return pageSize; } @@ -78,27 +78,27 @@ public Optional getPageSize() { /** * @return Filter entities by name. */ - @JsonIgnore + @JsonProperty("search") public Optional getSearch() { return search; } - @JsonIgnore + @JsonProperty("status") public Optional getStatus() { return status; } - @JsonIgnore + @JsonProperty("entity_type") public Optional getEntityType() { return entityType; } - @JsonIgnore + @JsonProperty("sort_by") public Optional getSortBy() { return sortBy; } - @JsonIgnore + @JsonProperty("sort_order") public Optional getSortOrder() { return sortOrder; } diff --git a/src/main/java/com/newscatcher/catchall/resources/entities/requests/ListEntitiesRequest.java b/src/main/java/com/newscatcher/catchall/resources/entities/requests/ListEntitiesRequest.java index 040640d..95caf83 100644 --- a/src/main/java/com/newscatcher/catchall/resources/entities/requests/ListEntitiesRequest.java +++ b/src/main/java/com/newscatcher/catchall/resources/entities/requests/ListEntitiesRequest.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -62,7 +62,7 @@ private ListEntitiesRequest( /** * @return Page number to retrieve. */ - @JsonIgnore + @JsonProperty("page") public Optional getPage() { return page; } @@ -70,7 +70,7 @@ public Optional getPage() { /** * @return Number of entities per page. */ - @JsonIgnore + @JsonProperty("page_size") public Optional getPageSize() { return pageSize; } @@ -78,27 +78,27 @@ public Optional getPageSize() { /** * @return Filter entities by name (case-insensitive substring match). */ - @JsonIgnore + @JsonProperty("search") public Optional getSearch() { return search; } - @JsonIgnore + @JsonProperty("status") public Optional getStatus() { return status; } - @JsonIgnore + @JsonProperty("entity_type") public Optional getEntityType() { return entityType; } - @JsonIgnore + @JsonProperty("sort_by") public Optional getSortBy() { return sortBy; } - @JsonIgnore + @JsonProperty("sort_order") public Optional getSortOrder() { return sortOrder; } diff --git a/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetJobResultsRequest.java b/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetJobResultsRequest.java index 5eb2847..0a8a21d 100644 --- a/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetJobResultsRequest.java +++ b/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetJobResultsRequest.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -36,7 +36,7 @@ private GetJobResultsRequest( /** * @return Page number to retrieve. */ - @JsonIgnore + @JsonProperty("page") public Optional getPage() { return page; } @@ -44,7 +44,7 @@ public Optional getPage() { /** * @return Number of records per page. */ - @JsonIgnore + @JsonProperty("page_size") public Optional getPageSize() { return pageSize; } diff --git a/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetUserJobsRequest.java b/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetUserJobsRequest.java index 81d52bc..2113b24 100644 --- a/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetUserJobsRequest.java +++ b/src/main/java/com/newscatcher/catchall/resources/jobs/requests/GetUserJobsRequest.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -47,7 +47,7 @@ private GetUserJobsRequest( /** * @return Page number to retrieve. */ - @JsonIgnore + @JsonProperty("page") public Optional getPage() { return page; } @@ -55,7 +55,7 @@ public Optional getPage() { /** * @return Number of records per page. */ - @JsonIgnore + @JsonProperty("page_size") public Optional getPageSize() { return pageSize; } @@ -63,7 +63,7 @@ public Optional getPageSize() { /** * @return Filter results by text (case-insensitive substring match). */ - @JsonIgnore + @JsonProperty("search") public Optional getSearch() { return search; } @@ -71,7 +71,7 @@ public Optional getSearch() { /** * @return Filter results by ownership. Defaults to all. */ - @JsonIgnore + @JsonProperty("ownership") public Optional getOwnership() { return ownership; } diff --git a/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorJobsRequest.java b/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorJobsRequest.java index 434a08b..5575d5f 100644 --- a/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorJobsRequest.java +++ b/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorJobsRequest.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -34,7 +34,7 @@ private ListMonitorJobsRequest( /** * @return Sort by start_date (asc or desc). */ - @JsonIgnore + @JsonProperty("sort") public Optional getSort() { return sort; } diff --git a/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorsRequest.java b/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorsRequest.java index 1750b47..82c3728 100644 --- a/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorsRequest.java +++ b/src/main/java/com/newscatcher/catchall/resources/monitors/requests/ListMonitorsRequest.java @@ -5,9 +5,9 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.annotation.Nulls; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -47,7 +47,7 @@ private ListMonitorsRequest( /** * @return Page number to retrieve. */ - @JsonIgnore + @JsonProperty("page") public Optional getPage() { return page; } @@ -55,7 +55,7 @@ public Optional getPage() { /** * @return Number of records per page. */ - @JsonIgnore + @JsonProperty("page_size") public Optional getPageSize() { return pageSize; } @@ -63,7 +63,7 @@ public Optional getPageSize() { /** * @return Filter results by text (case-insensitive substring match). */ - @JsonIgnore + @JsonProperty("search") public Optional getSearch() { return search; } @@ -71,7 +71,7 @@ public Optional getSearch() { /** * @return Filter results by ownership. Defaults to all. */ - @JsonIgnore + @JsonProperty("ownership") public Optional getOwnership() { return ownership; }