skyscreamer / yoga

Yoga is RESTful but flexible.
http://yoga.skyscreamer.org/
Apache License 2.0
156 stars 66 forks source link

YogaSpringView selects random model attribute to render #234

Open nikosk opened 10 years ago

nikosk commented 10 years ago

YogaSpringView randomly selects the first available model attribute although it might not be the intended one.

Steps to reproduce:

1) Create method in controller with the following signature:

@RequestMapping(method = RequestMethod.GET)
    public List<Entity> list(@Valid ParamsDTO params) {

2) The model passed to the view will now contain at least the attribute for the bound ParamsDTO object, a BindingResult object and an attribute for the returned value in that order. In this case the ParamsDTO object will be rendered.

Relevant source code:

YogaSpringView.java:32

yogaView.render( request, response, model.isEmpty() ? null : model.values().iterator().next(), response.getOutputStream() );

Solutions (?)

Just out of the top of my head:

a) provide an annotation and have the view scan the model for objects with that annotaton? (But then what about collections? maybe pre-register entities for serialization via annotations or spring config and select the collection if its generic type is in the list of registered types?)

b) provide a filter that will scan the model for key patterns i.e. entity*. This could work because Spring has a mechanism to create names for model attributes, for example when the attribute is a list it will name it "[generic type of the list]List" i.e.: customerList.

nikosk commented 10 years ago

232 is relevant to this issue

sduskis commented 10 years ago

OK I'll try to see if we're can replicate some functionality from SpringMVC. Thank you for the catch.

-Solomon On Dec 18, 2013 5:46 PM, "nikosk" notifications@github.com wrote:

232 https://github.com/skyscreamer/yoga/issues/232 is relevant to this

issue

— Reply to this email directly or view it on GitHubhttps://github.com/skyscreamer/yoga/issues/234#issuecomment-30888991 .

mjason3 commented 10 years ago

Any updates on this? when i add Yoga, all my PUT and POST are returning BindingResult.