抜粋:https://www.cnblogs.com/smallSevens/p/11758718.html
正しい姿勢のパラメータ渡さSpringBoot開発事例
序文
非常に多くの年のための開発は、多くの小さなパートナーは、各種パラメータが渡される混乱があるか確認してください、多くの学生は、使用、コピーやラインを貼り付け、問題が発生したか、無知な力を見るために準備させられます。
姿勢
正しい姿勢のパラメータの受け渡しを学び、最初に行う方法を言うと、何で、本質的には、行をコピー&ペーストすることで、問題は、なぜ尋ねるように依頼したくないです!
転送
ユーザーログイン
フロントエンドのコード:
var param = {
"username": "admin",
"password": "admin" } $.ajax({ url: "/sys/login", data: param, type: "post", dataType: "json", success: function(data) { } });
バックエンドのコード:
@RestController
@RequestMapping("/sys")
public class LoginController { private static final Logger logger = LoggerFactory.getLogger(LoginController.class); /** * 登录 */ @PostMapping("/login") public Result login(String username, String password){ logger.info("用户登录"+username); //业务逻辑 return Result.ok("登录成功"); } }
もちろん、あなたもそう実装することができ@RequestParam(value="username", required=true)
、required
デフォルトでは true
フォアグラウンド場合、バックグラウンドエラーをこのパラメータを渡すことはありません。設定した場合は false
合格しない場合、デフォルトです null
。
/**
* 登录
* https://blog.52itstyle.vip
*/
@PostMapping("/login")
public Result login(@RequestParam(value="username", required=true) String username, @RequestParam(value="password", required=true) String password){ logger.info("用户登录"+username); //业务逻辑 return Result.ok("登录成功"); }
ユーザー登録
フロントエンドのコードは、提出のログインは同じままでした。
バックエンドのコード:
オブジェクトは、対応するエンティティクラスの典型的後端を受信する受信パラメータ。
/**
* 注册
* https://blog.52itstyle.vip
*/
@PostMapping("/register")
public Result register(SysUser user){
logger.info("{},用户注册",user.getUsername()); //业务逻辑 return Result.ok("注册成功"); }
マルチパラメータ非実体
フロントエンドのコード:
var param = {
"title": "爪哇笔记",
"content": "一个有趣的公众号", "author": "小柒2012" } param = JSON.stringify(param); $.ajax({ url: "/sys/multiParameter", data: param, type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 多参数
* https://blog.52itstyle.vip
*/
@PostMapping("/multiParameter")
public Result register(@RequestBody Map<String,Object> map){
logger.info("多参数传递:{},{}",map.get("title"),map.get("content")); //业务逻辑 return Result.ok("接收多参数成功"); }
マルチパラメータなしの2つのエンティティ
フロントエンドのコード:
var param = {
"title": "爪哇笔记",
"content": "一个有趣的公众号", "author": "小柒2012" } $.ajax({ url: "/sys/multiParameter", data: param, type: "post", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 多参数
* https://blog.52itstyle.vip
*/
@PostMapping("/multiParameter")
public Result register(@RequestParam Map<String,Object> map){
logger.info("多参数传递:{},{}",map.get("title"),map.get("content")); //业务逻辑 return Result.ok("接收多参数成功"); }
配列を渡します
フロントエンドのコード:
var param = {
"ids": [1, 2, 3] } $.ajax({ url: "/sys/array", data: param, type: "post", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 数组
* https://blog.52itstyle.vip
*/
@PostMapping("array")
public Result array(@RequestParam(value = "ids[]") Integer[] ids) { logger.info("数据{}", Arrays.asList(ids)); //业务逻辑 return Result.ok(); }
コレクションを渡します
フロントエンド伝動コード一貫アレイ。
バックエンドの実装:
/**
* 集合
* https://blog.52itstyle.vip
*/
@PostMapping("array")
public Result array(@RequestParam(value = "ids[]") List<Integer> ids) { logger.info("数据{}", ids.toString()); //业务逻辑 return Result.ok(); }
コレクションのエンティティオブジェクトを渡します
例えば、後端は、エンティティオブジェクトのコレクションを受け取りたいです List<SysUser>
フロントエンドのコード:
var list = [];
list.push({
"username": "小柒2012", "mobile": "17762288888" }); list.push({ "username": "小柒2013", "mobile": "17762289999" }); $.ajax({ url: "/sys/listUser", data: JSON.stringify(list), type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });
バックエンドのコード:
/**
* 爪哇笔记
* https://blog.52itstyle.vip
*/
@PostMapping("listUser")
public Result listUser(@RequestBody List<SysUser> list) {
logger.info("数据{}", list.size()); list.forEach(user->{ //输出实体对象 System.out.println(user.getUsername()); }); //业务逻辑 return Result.ok(); }
エンティティのコレクションを渡す多くのオブジェクト
例えば、ユーザは、複数の役割を有しています List<SysRole> roleList
フロントエンドのコード:
var roleList = [];
roleList.push({
"roleSign": "admin",
"roleName": "管理员" }); roleList.push({ "roleSign": "user", "roleName": "普通用户" }); var list = []; var user = { "username": "小柒2012", "mobile": "17762288888" }; user.roleList = roleList; list.push(user); $.ajax({ url: "/sys/listUserRole", data: JSON.stringify(list), type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 爪哇笔记
* https://blog.52itstyle.vip
*/
@PostMapping("listUserRole")
public Result listUserRole(@RequestBody List<SysUser> list) { logger.info("数据{}", list.size()); list.forEach(user->{ List<SysRole> roleList = user.getRoleList(); roleList.forEach(role->{ System.out.println(role.getRoleName()); }); }); return Result.ok(); }
チキン複雑
トランスポート・オブジェクト・エンティティ、コレクション、データの様々な種類があり、この時間は、転送する最も簡単な方法である Key-Value
構造の JSON
文字列は、背景 Map
タイプは、その後、受信 及び 対応するエンティティまたはコレクションに変換します。FastJson
JSON.parseObject()
JSON.parseArray()
String user = parseMap.get("user").toString();
SysUser sysUser = JSON.parseObject(user,SysUser.class);
String contractClause = parseMap.get("rules").toString(); List<Rule> ruleList = JSON.parseArray(contractClause,Rule.class);
RESTfulなスタイル
例えば、記事にアクセスします。
/**
* 爪哇笔记
* https://blog.52itstyle.vip
*/
@GetMapping("article/{id}")
public void article(@PathVariable("id") String id) { logger.info("文章{}",id); //业务逻辑 }
原則
次の点に注意してください。
-
@RequestBody
メモは、でなければならないcontentType
タイプapplication/json
一緒に使用します。 -
@RequestParam
メモは、でなければならないcontentType
タイプapplication/x-www-form-urlencoded
のデフォルトのタイプです組み合わせて使用し、。 -
JSON.stringify()
一般的に、文字列オブジェクト型に変換@RequestBody
注釈とcontentType
の種類application/json
を使用。
スプレッド
上記では2つしか含ま contentType
種類を、実際には、2つの一般的なタイプがあります。
multipart/form-data
一般的に、ファイルアップロードフォームのenctypeに使用するには、この値に等しく形成させなければなりません。
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="text" name="description" value="爪哇笔记,一个神奇的公众号"> <input type="file" name="myFile"> <button type="submit">Submit</button> </form>
text/xml
マイクロチャネルはまた、昨年起こった、少しの友人は、あなたがこのようにマイクロチャネルを使用したいことを知っているだろう支払う完了 XXE
ローカル保護されたファイルを読み込み、XMLドキュメントを解析するとき抜け穴を、ENTITYによってパーサが機能を拡張し、拡張を使用して関数は、リモートアドレスに保護されたファイルを送信します。
概要
私は、パラメータを渡すためにすべての方法は、360°の公式検査されているため、最も正しいことを最も完全な質量参加プログラムですが、絶対的な保証と言うことはできません。
著者: 小さなチー
出典: https://blog.52itstyle.vip
共有はまた、記事の大半は要約などで避けられ基づいて通常の学習経験の蓄積、自己認識の欠如、そして私を修正してください、と共通の進歩されている、個人の成長過程を目撃し、満足しています。
この記事は、転載することを歓迎し、すべての作者に属しますが、この節で宣言され、著者の同意なしに保持され、問題はメール([email protected])相談することができた場合、明らかに、記事ページ内の位置を指定する必要があります。
序文
非常に多くの年のための開発は、多くの小さなパートナーは、各種パラメータが渡される混乱があるか確認してください、多くの学生は、使用、コピーやラインを貼り付け、問題が発生したか、無知な力を見るために準備させられます。
姿勢
正しい姿勢のパラメータの受け渡しを学び、最初に行う方法を言うと、何で、本質的には、行をコピー&ペーストすることで、問題は、なぜ尋ねるように依頼したくないです!
転送
ユーザーログイン
フロントエンドのコード:
var param = {
"username": "admin",
"password": "admin" } $.ajax({ url: "/sys/login", data: param, type: "post", dataType: "json", success: function(data) { } });
バックエンドのコード:
@RestController
@RequestMapping("/sys")
public class LoginController { private static final Logger logger = LoggerFactory.getLogger(LoginController.class); /** * 登录 */ @PostMapping("/login") public Result login(String username, String password){ logger.info("用户登录"+username); //业务逻辑 return Result.ok("登录成功"); } }
もちろん、あなたもそう実装することができ@RequestParam(value="username", required=true)
、required
デフォルトでは true
フォアグラウンド場合、バックグラウンドエラーをこのパラメータを渡すことはありません。設定した場合は false
合格しない場合、デフォルトです null
。
/**
* 登录
* https://blog.52itstyle.vip
*/
@PostMapping("/login")
public Result login(@RequestParam(value="username", required=true) String username, @RequestParam(value="password", required=true) String password){ logger.info("用户登录"+username); //业务逻辑 return Result.ok("登录成功"); }
ユーザー登録
フロントエンドのコードは、提出のログインは同じままでした。
バックエンドのコード:
オブジェクトは、対応するエンティティクラスの典型的後端を受信する受信パラメータ。
/**
* 注册
* https://blog.52itstyle.vip
*/
@PostMapping("/register")
public Result register(SysUser user){
logger.info("{},用户注册",user.getUsername()); //业务逻辑 return Result.ok("注册成功"); }
マルチパラメータ非実体
フロントエンドのコード:
var param = {
"title": "爪哇笔记",
"content": "一个有趣的公众号", "author": "小柒2012" } param = JSON.stringify(param); $.ajax({ url: "/sys/multiParameter", data: param, type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 多参数
* https://blog.52itstyle.vip
*/
@PostMapping("/multiParameter")
public Result register(@RequestBody Map<String,Object> map){
logger.info("多参数传递:{},{}",map.get("title"),map.get("content")); //业务逻辑 return Result.ok("接收多参数成功"); }
マルチパラメータなしの2つのエンティティ
フロントエンドのコード:
var param = {
"title": "爪哇笔记",
"content": "一个有趣的公众号", "author": "小柒2012" } $.ajax({ url: "/sys/multiParameter", data: param, type: "post", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 多参数
* https://blog.52itstyle.vip
*/
@PostMapping("/multiParameter")
public Result register(@RequestParam Map<String,Object> map){
logger.info("多参数传递:{},{}",map.get("title"),map.get("content")); //业务逻辑 return Result.ok("接收多参数成功"); }
配列を渡します
フロントエンドのコード:
var param = {
"ids": [1, 2, 3] } $.ajax({ url: "/sys/array", data: param, type: "post", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 数组
* https://blog.52itstyle.vip
*/
@PostMapping("array")
public Result array(@RequestParam(value = "ids[]") Integer[] ids) { logger.info("数据{}", Arrays.asList(ids)); //业务逻辑 return Result.ok(); }
コレクションを渡します
フロントエンド伝動コード一貫アレイ。
バックエンドの実装:
/**
* 集合
* https://blog.52itstyle.vip
*/
@PostMapping("array")
public Result array(@RequestParam(value = "ids[]") List<Integer> ids) { logger.info("数据{}", ids.toString()); //业务逻辑 return Result.ok(); }
コレクションのエンティティオブジェクトを渡します
例えば、後端は、エンティティオブジェクトのコレクションを受け取りたいです List<SysUser>
フロントエンドのコード:
var list = [];
list.push({
"username": "小柒2012", "mobile": "17762288888" }); list.push({ "username": "小柒2013", "mobile": "17762289999" }); $.ajax({ url: "/sys/listUser", data: JSON.stringify(list), type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });
バックエンドのコード:
/**
* 爪哇笔记
* https://blog.52itstyle.vip
*/
@PostMapping("listUser")
public Result listUser(@RequestBody List<SysUser> list) {
logger.info("数据{}", list.size()); list.forEach(user->{ //输出实体对象 System.out.println(user.getUsername()); }); //业务逻辑 return Result.ok(); }
エンティティのコレクションを渡す多くのオブジェクト
例えば、ユーザは、複数の役割を有しています List<SysRole> roleList
フロントエンドのコード:
var roleList = [];
roleList.push({
"roleSign": "admin",
"roleName": "管理员" }); roleList.push({ "roleSign": "user", "roleName": "普通用户" }); var list = []; var user = { "username": "小柒2012", "mobile": "17762288888" }; user.roleList = roleList; list.push(user); $.ajax({ url: "/sys/listUserRole", data: JSON.stringify(list), type: "post", contentType: "application/json", dataType: "json", success: function(data) { } });
バックエンドの実装:
/**
* 爪哇笔记
* https://blog.52itstyle.vip
*/
@PostMapping("listUserRole")
public Result listUserRole(@RequestBody List<SysUser> list) { logger.info("数据{}", list.size()); list.forEach(user->{ List<SysRole> roleList = user.getRoleList(); roleList.forEach(role->{ System.out.println(role.getRoleName()); }); }); return Result.ok(); }
チキン複雑
トランスポート・オブジェクト・エンティティ、コレクション、データの様々な種類があり、この時間は、転送する最も簡単な方法である Key-Value
構造の JSON
文字列は、背景 Map
タイプは、その後、受信 及び 対応するエンティティまたはコレクションに変換します。FastJson
JSON.parseObject()
JSON.parseArray()
String user = parseMap.get("user").toString();
SysUser sysUser = JSON.parseObject(user,SysUser.class);
String contractClause = parseMap.get("rules").toString(); List<Rule> ruleList = JSON.parseArray(contractClause,Rule.class);
RESTfulなスタイル
例えば、記事にアクセスします。
/**
* 爪哇笔记
* https://blog.52itstyle.vip
*/
@GetMapping("article/{id}")
public void article(@PathVariable("id") String id) { logger.info("文章{}",id); //业务逻辑 }
原則
次の点に注意してください。
-
@RequestBody
メモは、でなければならないcontentType
タイプapplication/json
一緒に使用します。 -
@RequestParam
メモは、でなければならないcontentType
タイプapplication/x-www-form-urlencoded
のデフォルトのタイプです組み合わせて使用し、。 -
JSON.stringify()
一般的に、文字列オブジェクト型に変換@RequestBody
注釈とcontentType
の種類application/json
を使用。
スプレッド
上記では2つしか含ま contentType
種類を、実際には、2つの一般的なタイプがあります。
multipart/form-data
一般的に、ファイルアップロードフォームのenctypeに使用するには、この値に等しく形成させなければなりません。
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="text" name="description" value="爪哇笔记,一个神奇的公众号"> <input type="file" name="myFile"> <button type="submit">Submit</button> </form>
text/xml
マイクロチャネルはまた、昨年起こった、少しの友人は、あなたがこのようにマイクロチャネルを使用したいことを知っているだろう支払う完了 XXE
ローカル保護されたファイルを読み込み、XMLドキュメントを解析するとき抜け穴を、ENTITYによってパーサが機能を拡張し、拡張を使用して関数は、リモートアドレスに保護されたファイルを送信します。
概要
私は、パラメータを渡すためにすべての方法は、360°の公式検査されているため、最も正しいことを最も完全な質量参加プログラムですが、絶対的な保証と言うことはできません。