$.ajaxアクセスRESTful Web Serviceエラー:Unsupported Media Type


最近のプロジェクトでは、フロントページがjquery ajaxを使用してバックグラウンドCXFで公開されたrestサービスにアクセスした結果、「Unsupported Media Type」というエラーが発生しました.
パブリッシュされたサービス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;
	}		
});