googleapis / googleapis/java-genai

Support POJO/Java Class for automatic responseSchema generation

Open
#764 1 comment 0 reactions 1 assignee Claimed by @hemasekhar-p View on GitHub
priority: p3 type: feature request
Dominant language
Java
Stars
397
Forks
125
Avg merge
2d 8h
Merged PRs (30d)
41

Description

**Is your feature request related to a problem? Please describe.**
I am frustrated when I have to manually define the `responseSchema` using complex builders, even though I already have well-structured DTO (Data Transfer Object) classes in my Java project.

Currently, the Java SDK requires developers to manually construct a `Schema` object. This leads to redundant work and high maintenance costs, as any change in the Java class must be manually reflected in the `Schema` builder. For example, in a project with many complex DTOs, this manual mapping is highly error-prone and degrades the Developer Experience (DX).

**Describe the solution you'd like**
I would like the `GenerateContentConfig.Builder` to support an overloaded `responseSchema(Class clazz)` method. This method should automatically introspect the provided Java class (POJO/Record) and generate the corresponding `Schema` object.

**Desired Usage:**

```java
// Instead of manual Schema building
GenerateContentConfig config = GenerateContentConfig.builder()
.responseMimeType("application/json")
.responseSchema(MyResponseDto.class) // Passing the DTO class directly
.build();

```

The SDK should ideally use reflection or existing Jackson integration to map Java types (String, Integer, List, etc.) to the Gemini `Type` system.

**Describe alternatives you've considered**
I have considered the **Python Gen AI SDK**, which already provides this functionality through **Pydantic models**. Python developers can simply pass a class to `response_schema`, and the SDK handles the rest.

Currently, in Java, I have to write a custom utility using `jsonschema-generator` and map it back to the SDK's `Schema` object. This feels like a feature that should be natively supported to ensure "Feature Parity" across different language SDKs.

**Additional context**
Since the SDK already utilizes **Jackson** (`@JsonProperty`), implementing this wouldn't necessarily require heavy new dependencies. The implementation could respect Jackson annotations:

* `@JsonPropertyDescription`: To populate the `description` field in the schema.
* `@JsonProperty`: To handle custom field naming.

This enhancement would make the Java SDK feel much more "idiomatic" and productive for enterprise-level backend development.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.