You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "justin miller (JIRA)" <ji...@apache.org> on 2013/03/22 18:21:16 UTC

[jira] [Updated] (WW-3975) DefaultContentTypeHandlerManager does not handle application/json content type correctly

     [ https://issues.apache.org/jira/browse/WW-3975?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

justin miller updated WW-3975:
------------------------------

    Attachment: DefaultContentTypeHandlerManager.java.patch

Here's a patch to the DefaultContentTypeHandlerManager currently in trunk
                
> DefaultContentTypeHandlerManager does not  handle application/json content type correctly
> -----------------------------------------------------------------------------------------
>
>                 Key: WW-3975
>                 URL: https://issues.apache.org/jira/browse/WW-3975
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Plugin - REST
>    Affects Versions: 2.3.4.1, 2.3.8
>         Environment: windows 7 64-bit 
> java 1.7.0_05
>            Reporter: justin miller
>            Priority: Minor
>             Fix For: 2.3.14
>
>         Attachments: DefaultContentTypeHandlerManager.java.patch, diff
>
>
> Setting the HTTP Content-Type request header to either application/json or application/json;charset=UTF-8 does not get handled correctly by the DefaultContentTypeHandlerManager. At line 91 (v2.3.8) in DefaultContentTypeHandlerManager, the content type is stripped of everything after and including the semi-colon (i.e., application/json;charset=UTF-8 becomes application/json).  Line 91-93:
> {code:java}
> int index = contentType.indexOf(';');
> if( index != -1)
>     contentType = contentType.substring(0,index).trim();
> {code}
> Unfortunately, the JsonLibHandler getContentType() method returns "application/json;charset=ISO-8859-1" and because the charset was stripped, the JsonLibHandler is not correctly chosen. 
> This issue is can potentially be mitigated by additionally setting the extension to .json but it would be nice to rely solely on the Content-Type header.
> I see the value of stripping the header down to the basic type so it's likely that the handlersByContentType Map will need to be interrogated twice.  Something like this:
> {code:java}
> String contentType = req.getContentType();
> if (contentType != null) {
>     handler = handlersByContentType.get(contentType);
>     if ( handler == null ) {
>         int index = contentType.indexOf(';');
> 	if( index != -1)
> 	    contentType = contentType.substring(0,index).trim();
> 	handler = handlersByContentType.get(contentType);
>     }
> }
> {code}        

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira