SpringMVCは、jsonデータを受信し、応答するいくつかの方法です。
前言
前後端のデータがインタラクションされ、formフォームによって提出される以外に、ajaxによって後端にjsonフォーマットデータを転送し、受信することもできる(このようにして、要求データとページ分離を実現することができる)。ここでは、Spring MVCでJsonデータを受信し、応答するいくつかの方法をまとめます。
話が多くないので、詳しく紹介してみましょう。
準備ステップ:
1.json関連フレームの依存性を導入する(例えば、jackson)。
2.spring mvcのcontroller方法は正常に書き、jsonに応答する必要があれば、@reponsebody注を追加します。
3.json対応の入力パラメータを受け取る前に@Request Bodyコメントを追加します。
サービス端末がJsonデータを受信してjavaオブジェクトに還元することを反プログレッシブといい、逆にJAVAオブジェクトを応答としてjsonデータに変換してクライアントに返送することをプログレッシブといいます。
注意:ajaxを使うので、jQueryを導入しなければなりません。ぜひ覚えてください。
jackson maven依存:
背景:ajax伝達のパラメータが多い場合、パラメータ名整合の方法を採用するのは不便です。バックグラウンドに対応するエンティティクラスがある場合、クライアントでデータをjson形式にカプセル化してバックグラウンドに渡すことを選択し、バックグラウンドは対応するエンティティクラスで受信することができる。
クライアント:
@Request Body注解は、常にcontent-typeがデフォルトのaplication/x-www-form-urlcodedコードの内容ではないことを処理するために使用されます。一般的には、aplication/jsonのタイプを扱うのが一般的です。
コントローラ:
クライアント:success:1,ジャック
もしControllerのすべての方法がjsonフォーマットのデータに戻る必要があるなら、@RestitController注解を使用してもいいです。
@RertController=@Controller+@ResonseBody
Controller(上のControllerは下のものに置き換えられます):
二、mapで受信する
背景:フロントはバックグランドにajax要求を送り、多くのパラメータを携帯していますが、バックグラウンドは対応していないエンティティ類を受信するにはどうすればいいですか?最も一般的なのはフォームです。ここではmapを使って解決することが考えられます。mapのデータ構造はkey-value形式ですので、検索ボックスのフォームを巡回して、フォームのnameをmapのkeyとして、フォームのvalueをmapのvalueとします。
クライアント:
クライアント(パチンコ):book Name=Love;author=Frank
三、リスト方式で受信する(json配列で伝達する)
クライアント:
コントローラ:
コンソール出力:現在のhttp要求方式は、POST[entity.Book@1138a75cイベント.Book@22d1cbcf」
クライアント(パチンコ):book Id=123;author=Rose book Id=321;author=ジャック
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。
前後端のデータがインタラクションされ、formフォームによって提出される以外に、ajaxによって後端にjsonフォーマットデータを転送し、受信することもできる(このようにして、要求データとページ分離を実現することができる)。ここでは、Spring MVCでJsonデータを受信し、応答するいくつかの方法をまとめます。
話が多くないので、詳しく紹介してみましょう。
準備ステップ:
1.json関連フレームの依存性を導入する(例えば、jackson)。
2.spring mvcのcontroller方法は正常に書き、jsonに応答する必要があれば、@reponsebody注を追加します。
3.json対応の入力パラメータを受け取る前に@Request Bodyコメントを追加します。
サービス端末がJsonデータを受信してjavaオブジェクトに還元することを反プログレッシブといい、逆にJAVAオブジェクトを応答としてjsonデータに変換してクライアントに返送することをプログレッシブといいます。
注意:ajaxを使うので、jQueryを導入しなければなりません。ぜひ覚えてください。
jackson maven依存:
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.0</version>
</dependency>
一、実体クラスで受信する背景:ajax伝達のパラメータが多い場合、パラメータ名整合の方法を採用するのは不便です。バックグラウンドに対応するエンティティクラスがある場合、クライアントでデータをjson形式にカプセル化してバックグラウンドに渡すことを選択し、バックグラウンドは対応するエンティティクラスで受信することができる。
クライアント:
<button onclick="clickMe()"> </button>
<script>
function clickMe() {
$.ajax({
type : 'POST',
url : "acceptJsonByEntity",
contentType : "application/json;charset=utf-8",
// json ,JSON.stringify() ,
data : JSON.stringify({
"bookId" : 1,
"author" : "Jack"
}),
//
dataType : "json",
success : function(data) {
var bookId = data.bookId;
var author = data.author;
alert("success:" + bookId+','+author);
},
error : function(data) {
alert("error" + data);
}
});
</script>
@reponseBodyコメントは、controllerの方法で戻ったオブジェクトを適切な変換器で指定されたフォーマットに変換した後、reponseオブジェクトのbodyエリアに書き込み、JSONデータまたはXMLに戻すために使用されます。@Request Body注解は、常にcontent-typeがデフォルトのaplication/x-www-form-urlcodedコードの内容ではないことを処理するために使用されます。一般的には、aplication/jsonのタイプを扱うのが一般的です。
コントローラ:
@Controller
public class PassJsonParam {
@RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
@ResponseBody
public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){
System.out.println(" http :"+request.getMethod());
System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());
return book;
}
}
コンソール出力:現在のhttp要求方式は、POST book Id=1、author=ジャックです。クライアント:success:1,ジャック
もしControllerのすべての方法がjsonフォーマットのデータに戻る必要があるなら、@RestitController注解を使用してもいいです。
@RertController=@Controller+@ResonseBody
Controller(上のControllerは下のものに置き換えられます):
@RestController
public class PassJsonParam {
@RequestMapping(value="acceptJsonByEntity",method = RequestMethod.POST)
public Book acceptJsonByEntity(@RequestBody Book book, HttpServletRequest request){
System.out.println(" http :"+request.getMethod());
System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor());
return book;
}
}
注意:@RertController注を使用した後、Controllerの方法は更にjspページまたはhtmlに戻りません。配置されたビュー解像器も機能しません。二、mapで受信する
背景:フロントはバックグランドにajax要求を送り、多くのパラメータを携帯していますが、バックグラウンドは対応していないエンティティ類を受信するにはどうすればいいですか?最も一般的なのはフォームです。ここではmapを使って解決することが考えられます。mapのデータ構造はkey-value形式ですので、検索ボックスのフォームを巡回して、フォームのnameをmapのkeyとして、フォームのvalueをmapのvalueとします。
クライアント:
<form id="bookForm">
<input type="text" name="bookName" id="bookName">
<input type="text" name="author" id="author" >
<button onclick="submitForm(event)"> </button>
</form>
<script>
function submitForm(event) {
// form
event.preventDefault();
//
var map = new Map();
$("#bookForm input").each(function () {
var value = $(this).val(); //input
var name = $(this).attr('name');
map.set(name,value);
})
//Map Json
var obj= Object.create(null);
for (var [k,v] of map) {
obj[k] = v;
}
$.ajax({
type: 'POST',
contentType:'application/json',
url: "acceptJsonByMap",
data: JSON.stringify(obj),
dataType: 'json',
success: function (data) {
var bookName = data.bookName;
var author = data.author;
alert("bookName ="+bookName+"; author="+author);
},
error: function (data) {
alert(" ");
}
});
}
</script>
コントローラ:
@RequestMapping(value="acceptJsonByMap")
@ResponseBody
public Map<String,Object> acceptJsonByMap(@RequestBody Map<String,Object> paramsMap, HttpServletRequest request){
System.out.println(" http :"+request.getMethod());
System.out.println(paramsMap);
return paramsMap;
}
コンソール出力:現在のhttp要求方式は、POST{book Name=Love、author=Frank}クライアント(パチンコ):book Name=Love;author=Frank
三、リスト方式で受信する(json配列で伝達する)
クライアント:
<button onclick="clickHere()">clickHere</button>
<script>
function clickHere() {
var params1 = {
"bookId":"123",
"author":"Rose"
};
var params2 = {
"bookId":"321",
"author":"Jack"
};
var list = [];
list.push(params1);
list.push(params2);
$.ajax({
type: 'POST',
contentType:'application/json',
url: "acceptJsonByList",
data: JSON.stringify(list),
dataType: 'json',
success: function (data) {
for (let i = 0; i < data.length; i++) {
var bookId = data[i].bookId;
var author = data[i].author;
alert("bookId ="+bookId+"; author="+author);
}
},
error: function (data) {
alert(" ");
}
});
}
</script>
注意:後端に送る時、listは[{key 1:value 1]{key 2:value 2]]のjson形式のデータであるべきです。そうでないと、Json parse errorエラーが発生する可能性があります。コントローラ:
@RequestMapping(value="acceptJsonByList")
@ResponseBody
public List<Book> acceptJsonByList(@RequestBody List<Book> book, HttpServletRequest request){
System.out.println(" http :"+request.getMethod());
System.out.println(book);
return book;
}
注意:ここではBookエンティティ類の受信が必要です。コンソール出力:現在のhttp要求方式は、POST[entity.Book@1138a75cイベント.Book@22d1cbcf」
クライアント(パチンコ):book Id=123;author=Rose book Id=321;author=ジャック
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。