当响应状态= 400

时间:2015-12-18 18:48:34

标签: tomcat restlet-2.3.1

我使用Restlet Framework(2.3.1)实现了REST服务。该服务接受(用户名,密码)并返回MD5身份验证字符串。 jQuery Ajax调用按如下方式执行:

$.ajax({ 
    url: host + '/authentication',   
    data: { username:'aaa', password:'bbb' },
    dataType: 'json' })
.done( function( data, textStatus, xhr ) 
{
    // The server returns a JSON data object. Display it as a string
    //
    console.log( JSON.stringify( data ) );   

    // Display the authString corresponding to username and password
    //                    
    console.log( data.authString );         
})
.fail( function( xhr, textStatus, errorThrown ) 
{   
    // Display error info
    //   
    console.log( xhr.status, xhr.statusText, xhr.responseText );       
});

服务器具有以下Java代码:

try
{
    String md5 = MD5Converter.encryptUsernamePassword( username, password );

    result = new JSONObject();
    result.put( "authString", md5 );
}
catch ( AuthenticationException e )
{
    setStatus( Status.CLIENT_ERROR_BAD_REQUEST);  
    result = new JSONObject();
    result.put( "error", "Invalid username and password" );
    return new JsonRepresentation( result );             
}            

return new JsonRepresentation( result ); 

如果接受用户名和密码,一切正常。但是,当返回状态代码CLIENT_ERROR_BAD_REQUEST时, 测试服务器(Windows 7,Tomcat)提供以下正确结果:

xhr.status = 400 
xhr.statusText = Bad Request 
xhr.responseText = {"error":"Invalid username and password"}

但是,当在生产服务器(Windows Server 2008,Tomcat)中执行相同的代码时,结果是

xhr.status = 400 
xhr.statusText = Bad Request 
xhr.responseText = Bad Request

生产服务器未返回{“error”:“用户名和密码无效”}。这意味着在Ajax .fail()部分中,所有信息性错误消息都将丢失,并被“错误请求”替换。

知道测试服务器和生产服务器之间出现这种不同行为的原因是什么?

0 个答案:

没有答案