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

Lukasz Lenart updated WW-3975:
------------------------------

    Fix Version/s:     (was: 2.3.14)
                   2.3.13
    
> 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.13
>
>         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

Reply via email to