$.ajaxアクセスRESTful Web Serviceエラー:Unsupported Media Type
1859 ワード
最近のプロジェクトでは、フロントページがjquery ajaxを使用してバックグラウンドCXFで公開されたrestサービスにアクセスした結果、「Unsupported Media Type」というエラーが発生しました.
パブリッシュされたサービスjavaコードは次のとおりです.
サービスを呼び出すjavascriptコードは次のとおりです.
呼び出したサービスのエラー:Unsupported Media Type.元のrequestメッセージとresponseメッセージをHttpWatchで表示すると、requestメッセージに返されるcontentTypeは、アプリケーション/x-www-form-urlencodedであることがわかります.jqueryを表示します.ajax()のAPIドキュメントで、contentTypeのデフォルト値はアプリケーション/x-www-form-urlencodedであることがわかりました.
ただし、バックグラウンドで発行されるrestサービス,@Consumes("アプリケーション/json")はrequestメッセージのcontentTypeがアプリケーション/jsonであることを要求する.
contentTypeを手動で設定すると、問題が解決します.
パブリッシュされたサービスjavaコードは次のとおりです.
import javax.jws.WebService;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
@WebService
@Produces({ "application/json" })
public class TrackService {
@POST
@Path("/trackInBatch/")
@Consumes("application/json")
public Response postTrackInfoInBatch(List<TrackPosition> positions) {
return retrieve(positions, clientGen, trafficMapLayerId, projectParaLayerId, "0");
}
}
サービスを呼び出すjavascriptコードは次のとおりです.
$.ajax({
url : "/myapp/rest/track/trackInBatch/",
async:false,
type : "POST",
dataType:"json",
data:[],
error:function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
},
success: function(data, textStatus){
outResponse = data;
}
});
呼び出したサービスのエラー:Unsupported Media Type.元のrequestメッセージとresponseメッセージをHttpWatchで表示すると、requestメッセージに返されるcontentTypeは、アプリケーション/x-www-form-urlencodedであることがわかります.jqueryを表示します.ajax()のAPIドキュメントで、contentTypeのデフォルト値はアプリケーション/x-www-form-urlencodedであることがわかりました.
ただし、バックグラウンドで発行されるrestサービス,@Consumes("アプリケーション/json")はrequestメッセージのcontentTypeがアプリケーション/jsonであることを要求する.
contentTypeを手動で設定すると、問題が解決します.
$.ajax({
url : "/myapp/rest/track/trackInBatch/",
async:false,
type : "POST",
dataType:"json",
contentType:"application/json",
data:[],
error:function(XMLHttpRequest, textStatus, errorThrown){
alert(errorThrown);
},
success: function(data, textStatus){
outResponse = data;
}
});