justin miller created WW-3975:
---------------------------------

             Summary: 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.8, 2.3.4.1
         Environment: windows 7 64-bit 
java 1.7.0_05
            Reporter: justin miller
            Priority: Minor


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

Reply via email to