日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java conterller_java后台controller能否直接接收list

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java conterller_java后台controller能否直接接收list 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

修改下問題,最下方為我項目的詳細代碼,精簡了一下,去除了state屬性,代碼順序最開始,基礎數據類型int,從單個int到int數組,到intarraylist,

單個stirng string數組, string list, arraylist,

單個Tag對象,Tag對象數組,list,arraylist

我網上找了很多例子,例子中的controller直接接收list都是接受的字符串類型,list,并沒有復雜對象類型的例子

目前我所知道的兩種解決辦法就是

1.新建一個vo類,里面有一個list屬性,controller接受這個類

2.接受字符串,將字符串轉為list

但是如果我就是想直接接受list呢?

這是我的類:

public class Tag {

int id;

String name;

int state;

}

我前臺傳給后臺的數據格式是這個樣子的

[{"id":1,"name":"123","state":0},{"id":3,"name":"456","state":0}]

我后臺能否直接在入參里面用list接收呢?

我弄了半天也不行;

那么大家平常都是如何處理的呢,都是入參接收字符串,然后用jackson等框架再轉成list嗎

或者是我把入參改成什么樣子后臺就可以接受了呢,我記得之前遇到過一次這個問題,從前臺遍歷對象然后弄得,但是代碼沒了,也忘了,但是那樣弄也挺麻煩的,最簡單的方法是什么呢

分割線

pom文件:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.example

demo

0.0.1-SNAPSHOT

jar

demo

Demo project for Spring Boot

org.springframework.boot

spring-boot-starter-parent

1.5.9.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-devtools

org.springframework.boot

spring-boot-starter-thymeleaf

net.sourceforge.nekohtml

nekohtml

1.9.22

mysql

mysql-connector-java

runtime

org.springframework.boot

spring-boot-maven-plugin

配置文件:

server:

port: 8088

spring:

thymeleaf:

mode: LEGACYHTML5

datasource:

url: jdbc:mysql://localhost:3306/ek

username: root

password: 1212

driver-class-name: com.mysql.jdbc.Driver

jpa:

database: MYSQL

show-sql: true

hibernate:

ddl-auto: update

properties:

hibernate:

dialect: org.hibernate.dialect.MySQL5Dialect

Tag類

package com.example.demo.entity;

public class Tag {

int id;

String name;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Tag [id=" + id + ", name=" + name + "]";

}

}

前臺和后臺從簡單到復雜一點一點來,各階段代碼:

version 1: 單個int類型,

前臺代碼:

index

測試

function commit(){

$.ajax({

type:"post",

url: 'add',

data:{

param:1

},

success:function(data){

console.log(data);

}

})

}

后臺代碼:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

@Controller

public class HelloController {

@RequestMapping("")

public String Hello(ModelMap map) {

return "index";

}

@ResponseBody

@RequestMapping(value = "add")

public String add(int param) {

System.out.println("param:" + param);

return "成功";

}

}

前端控制臺數據格式:

param:1

后臺控制臺輸出

param:1

version2:多個int類型;

將data:{

param:1

},

改為:

data:{

param:[1,2,3]

},

后臺代碼改為:

@ResponseBody

@RequestMapping(value = "add")

public String add(@RequestParam("param[]") int[] param) {

System.out.println("param:" + param);

System.out.println("param:" + Arrays.toString(param));

return "成功";

}

后臺入參改為:@RequestParam("param[]") int[] param

則可以正確接收,為param則不行

前臺控制臺數據格式:

param[]:1

param[]:2

param[]:3

后臺控制臺輸出:

param:[I@55a3f9bb

param:[1, 2, 3]

version3:后臺使用list接受

前臺代碼不變,

后臺代碼改為:

@ResponseBody

@RequestMapping(value = "add")

public String add(@RequestParam("param[]") List param) {

System.out.println("param:" + param);

return "成功";

}

前臺數據格式:

param[]:1

param[]:2

param[]:3

后臺控制臺輸出:

param:[1, 2, 3]

version4:后臺使用arraylist接收

前臺代碼不變,

后臺代碼改為:

@ResponseBody

@RequestMapping(value = "add")

public String add(@RequestParam("param[]") ArrayList param) {

System.out.println("param:" + param);

return "成功";

}

前臺數據格式:

param[]:1

param[]:2

param[]:3

后臺控制臺輸出:

param:[1, 2, 3]

version 5:使用字符串測試,結果和int類型結果完全一致,就不貼代碼了,

version 6:使用tag類測試,傳遞tag對象

index.html:

index

測試

function commit(){

$.ajax({

type:"post",

url: 'add',

data:{

id:1,

name:"hello"

},

success:function(data){

console.log(data);

}

})

}

helloController:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import com.example.demo.entity.Tag;

@Controller

public class HelloController {

@RequestMapping("")

public String Hello(ModelMap map) {

return "index";

}

@ResponseBody

@RequestMapping(value = "add")

public String add(Tag tag) {

System.out.println(tag);

return "成功";

}

}

version 6結果: 后臺可以成功接收Tag類的對象,

控制臺輸出為:Tag [id=1, name=hello]

version 7:

修改前臺數據格式:

data:{

id:1,

name:"hello"

},

改為:

data:{tag:{id:1,name:'hello'}},

后臺代碼不變

version 7

結果:后臺接受到的Tag類對象各屬性為空

控制臺輸出為:Tag [id=0, name=null]

前臺chrome控制臺中記錄的From data為:

tag[id]:1

tag[name]:hello

version 8 :使用tag類型的list接受數據

前臺data修改為:

data:{

param:[{id:1,name:'hello'},{id:2,name:'hello'}]

},

后臺代碼修改為:

@ResponseBody

@RequestMapping(value = "add")

public String add(@RequestParam("param[]") List param) {

System.out.println("param:" + param);

return "成功";

}

version 8 結果:

前臺chrome顯示數據格式為:

param0:1

param0:hello

param1:2

param1:hello

請求失敗,前臺500錯誤,

后臺代碼報錯:

錯誤信息為:

2018-01-29 13:22:06.313 WARN 3148 --- [nio-8088-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.web.bind.MissingServletRequestParameterException: Required List parameter 'param[]' is not present

version 9:

ajax新增contentType,

data使用JSON.stringify格式胡

controller入參加入@requestBody注解

前臺代碼:

function commit(){

var param=[{id:1,name:'hello'},{id:2,name:'hello'}];

console.log(param);

console.log(JSON.stringify(param));

$.ajax({

type:"post",

url: 'add',

contentType:"application/json; charset=utf-8",

dataType:"json",

data:{

param:JSON.stringify(param)

},

success:function(data){

console.log(data);

}

})

}

后臺代碼:

@ResponseBody

@RequestMapping(value = "add")

public String add(@RequestBody List param) {

System.out.println("param:" + param);

return "成功";

}

然后前臺請求報400錯誤,

前臺控制臺輸出位:

數據格式為:

param=%5B%7B%22id%22%3A1%2C%22name%22%3A%22hello%22%7D%2C%7B%22id%22%3A2%2C%22name%22%3A%22hello%22%7D%5D

后臺報錯為:

2018-01-29 13:34:06.096 WARN 3148 --- [nio-8088-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token 'param': was expecting ('true', 'false' or 'null'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'param': was expecting ('true', 'false' or 'null')

at [Source: java.io.PushbackInputStream@14a71bea; line: 1, column: 7]

2018-01-29 13:34:06.096 WARN 3148 --- [nio-8088-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized token 'param': was expecting ('true', 'false' or 'null'); nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'param': was expecting ('true', 'false' or 'null')

at [Source: java.io.PushbackInputStream@14a71bea; line: 1, column: 7]

總結

以上是生活随笔為你收集整理的java conterller_java后台controller能否直接接收list的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。