dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #19753
Re: baffled with web api
Hi Bob, it should be possible to define a more specific mapping in the
concrete controller class. To see the stack trace in the log you can
start any single web-module with mvn clean jetty:run . Your build
cycle is then to run mvn install on the dhis-web-api module, then mvn
clean jetty:run on e.g. dhis-web-reporting module.
Lars
On Sun, Oct 28, 2012 at 10:43 PM, Bob Jolliffe <bobjolliffe@xxxxxxxxx> wrote:
> Hi Morten
>
> On 28 October 2012 13:18, Morten Olav Hansen <mortenoh@xxxxxxxxx> wrote:
>> Hi Bob
>>
>> This should be as easy as adding another method.. we already have
>> getObjectList (I think thats the name.. ) in our ABC. What you will need to
>> do, is to add another method in DataSetController, maybe call it
>> getDataSetsDSD (or something similar). And have a request-mapping that
>> points to both dataSets and dataSets.dsd, this together with the consumed =
>> mimetype option, should give you a unique combination (spring mvc will
>> complain if two requestmappings point to the same method)
>
> This is all what I figured. Estimated 2 hours work and 2 days later
> :-) So I have a method in DataSetController with a signature like:
>
> @RequestMapping( value = DataSetController.RESOURCE_PATH + ".dsd",
> produces = "application/dsd+xml" )
> public void getStructure( @RequestParam Map<String, String>
> parameters, HttpServletResponse response )
>
> Which is I think like you say (other than produces rather than
> consumes). But all I get is the "Aw snap" page with nothing in the
> logs whatsoever which makes this really difficult to debug. (I don't
> know if you have any tips for efficient debugging, but currently my
> edit-compile-test cycle is also very unfriendly, going into many
> minutes).
>
> I *think* (and I feel I am no expert on this), that the getObjectList
> in abstract controller is catching ALL get requests to dataSets. I
> had originally thought that providing a more precise match to the
> request in the dataSets class would trump the more general match in
> the abstract controller (you will recognize xslt as having dominated
> my thinking on this matching business). Anyway it looks like it
> doesn't work like this. If two controller methods are an ambiguous
> match, spring seems to just go pop.
>
> Thats ok, but if it is the case, then either we would have to make
> specific exclusions to the abstract controller match (which could get
> ugly as it is used for much more than datasets), or move back away
> from /api/dataSets to something like /api/dsd.
>
> Can you confirm that I am reading this correctly.
>
> Bob
>
>
>
>>
>> Try it... if its not working, I will try and add it for you
>>
>> --
>> Morten
>>
>>
>>
>> On Sat, Oct 27, 2012 at 6:54 PM, Bob Jolliffe <bobjolliffe@xxxxxxxxx> wrote:
>>>
>>> Hi Morten
>>>
>>> I am struggling to grasp something (well actually to do something)
>>> which I thought would be fairly simple, and probably even is if only I
>>> knew how ...
>>>
>>> It has to do with where you have been clever with the
>>> AbstractCrudController in the web api.
>>>
>>> Something like DataSetController extends this.
>>>
>>> Currently /api/dataSets returns you the full list of datasets
>>> formatted in html. And using either the extension (.xml or .json) or
>>> accept headers we can get xml or json renditions of the same.
>>>
>>> But I want to return an alternative xml description of the structure
>>> of the datasets (lets call it as data structure definition or DSD).
>>> Is there any way to map a request which uses either an extension (eg
>>> dataSets.dsd) or accept header (eg application/dsd+xml) which DOES NOT
>>> get routed through the getObjectList method of AbstractCrudController?
>>>
>>> Bob
>>
>>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to : dhis2-devs@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help : https://help.launchpad.net/ListHelp
Follow ups
References