Skip to content

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

Closed
@spring-projects-issues

Description

@spring-projects-issues

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

Metadata

Metadata

Assignees

Labels

in: webIssues in web modules (web, webmvc, webflux, websocket)type: enhancementA general enhancement

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions