SpringBootJsonのこれらのピットへのJqueryajaxアクセス

ajaxアクセスの問題について話しましょう。

まず、一般的な状況を見てみましょう。

バックエンドはspringbootによって構築された環境であり、コントローラーは次のとおりです。

@SuppressWarnings({ "rawtypes", "unchecked" })
    @PostMapping(value = "/tasklistbytask")
    private Object taskListbyList(@RequestBody Map reqMap) {
    	log.info("----------------tasklistbylist-----------------");
		……

現時点では、フロントエンドはjqueryのajaxメソッドバックエンドを使用しており、常に次のエラーを表示します。

  WARN 3324 --- [nio-8082-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : 
Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

リクエストのソースコードは次のとおりです。

$(function () {
  var theTemplateScript = $("#example-template").html();  
  var theTemplate = Handlebars.compile(theTemplateScript);  
	$.ajax({
		url : '/tasklistbytask', 
		type : 'post',
		async:false, 
		data : {pageNum:'1',pageSize:'20'},
		dataType : 'json',
		success: function(result){
			  var theCompiledHtml = theTemplate(result);  
			  $('#tbody').append(theCompiledHtml); 
		},
		fail:function(e){
	
		},
		error:function(e){
	
		}
});
})

明らかに、springbootは、この要求が 'application / x-www-form-urlencoded; charset = UTF-8を介して行われたと考えており、これはパケットキャプチャツールでも確認できます。

 

同時に、POSTリクエストであるため、jsonのパラメーターがリクエスト本文の形式で送信されていることもわかります。

次に、jqueryドキュメントをクエリし、このメソッドがデフォルトのリクエストメソッドであることを確認しました。

したがって、リクエストメソッドを変更します。

$.ajax({
		url : '/tasklistbytask', 
		type : 'post',
		async:false, 
		data : {pageNum:'1',pageSize:'20'},
		contentType:'application/json',
		dataType : 'json',
		success: function(result){
			  var theCompiledHtml = theTemplate(result);  
			  $('#tbody').append(theCompiledHtml); 
		},
		fail:function(e){
	
		},
		error:function(e){
	
		}

このとき、バックグラウンドを再度リクエストしたところ、エラーが報告されました。

WARN 3324 --- [nio-8082-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : 
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token 'pageNum': was expecting ('true', 'false' or 'null'); 
nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'pageNum': was expecting ('true', 'false' or 'null')
 at [Source: (PushbackInputStream); line: 1, column: 9]]

この時点で、インターセプターによってインターセプトされた要求を確認します。

リクエストがjsonモードに変更されたことがわかりますが、実際には送信されたjsonは解析されていません。

最後に、データコンテンツを次のように変更します

データ:{"pageno":1、 "Pagesize":20} "

深刻なjsonスタイル、リクエストは成功しました!

おすすめ

転載: blog.csdn.net/H517604180/article/details/88856948