Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Subclass-resolved generic return type declarations for handler methods [SPR-16877] #21416

Closed
spring-projects-issues opened this issue May 27, 2018 · 3 comments
Assignees
Labels
in: web Issues in web modules (web, webmvc, webflux, websocket) type: enhancement A general enhancement
Milestone

Comments

@spring-projects-issues
Copy link
Collaborator

spring-projects-issues commented May 27, 2018

Daniel Theuke opened SPR-16877 and commented

If you have a generic AbstractController that specifies a method with a @RequestMapping and you don't overwrite it in the SpecificController then the GenericHttpMessageConverter won't get the actual data type that was returned from the method.

Due to this behavior it is impossible to use inheritance with generics for type dependent data formats such as CSV.

 

Provided data type: java.util.List<T>

Actual/Expected data type: java.util.List<MyDTO>

See the attached demo project for an easy way to reproduce.


There is a workaround for that though, override all the inherited methods in the SpecificController and just delegate to super.

 

@Override
public List<MyDTO> getList() {
     return super.getList();
}

 

However this is easy to forget, hard to spot and just adds plenty of noise to the controllers.


I haven't made any recent tests with Spring 4.x, but IIRC that version is also affected.


Affects: 5.0.6

Attachments:

Issue Links:

Referenced from: commits b915e42

@spring-projects-issues
Copy link
Collaborator Author

Juergen Hoeller commented

We resolve the target type for GenericHttpMessageConverter.canWrite/write against the concrete controller class now, exposing an artificial type reference with substituted type variables in a scenario like yours.

This will be available in the upcoming 5.1.0.BUILD-SNAPSHOT. Feel free to give it an early try...

@spring-projects-issues
Copy link
Collaborator Author

Daniel Theuke commented

Works as expected.
Thank you.

@spring-projects-issues
Copy link
Collaborator Author

Juergen Hoeller commented

Good to hear :-) Thanks for the immediate feedback!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
in: web Issues in web modules (web, webmvc, webflux, websocket) type: enhancement A general enhancement
Projects
None yet
Development

No branches or pull requests

2 participants