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/02/02 00:26:12 UTC

[jira] [Commented] (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:comment-tabpanel&focusedCommentId=13569236#comment-13569236 ] 

justin miller commented on WW-3975:
-----------------------------------

just realized it might be more efficient to modify the setContainer method (which creates the handlersByContentType map) so that it strips extra information from the content-type as is done in the getHandlerForRequest method
                
> 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
>         Attachments: 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:
>         	int index = contentType.indexOf(';');
>         	if( index != -1)
>         		contentType = contentType.substring(0,index).trim();
> 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:
>        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);
> 			}
>         }
>         

--
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