springmvc中多对象参数接收、model对象和json对象使用示例

本文介绍了在SpringMVC项目中如何处理多对象参数,使用Model对象以及接受JSON对象的示例。通过示例代码展示了在控制器层的实现,包括OtherController、MultiObjectController和ModelAttributeController的用法。此外,为了使用JSON,文章还提到了需要添加的三个依赖项,并在pom.xml中进行配置。最后,提供了JSONController的相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此项目基于前一个项目详情请看,里面的配置文件不用改,因此,我在这里只写了web.controller层的代码。
OtherController.java

package com.web.controller;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class OtherController {
	@GetMapping("/head")
	// 获取指定请求头信息
	public ModelAndView header(@RequestHeader("User-Agent") String userAgent) {
		System.out.println("userAgent=" + userAgent);
		return null;//可以不用页面
	}
	
	@GetMapping("/ck")
	public ModelAndView ck(@CookieValue("JSESSIONID") String cookie, HttpServletResponse response) {
		System.out.println("cookie=" + cookie);
		
		Cookie c = new Cookie("myCookie", "haha");
		c.setMaxAge(60);
		response.addCookie(c);
		
		return null;
	}	
}

多对象参数接收
MultiObjectController.java

package com.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

import com.bean.Cat;
import com.bean.Dog;//cat和dog类只有name和age属性和他们的get,set方法,因此不再写这两个类的代码

// 多对象参数接收
@Controller
public class MultiObjectController {
	/**
	 * 为了能够正常接收多对象参数,需要使用@InitBinder注解来注册
	 */
	@InitBinder("dog")
	public void initBinderDog(WebDataBinder binder) {
		binder.setFieldDefaultPrefix("dog.");
	}
	
	@InitBinder("cat")
	public void initBinderCat(WebDataBinder binder) {
		binder.setFieldDefaultPrefix("cat.");
	}
	
	@PostMapping("/show")
	public ModelAndView show(Dog dog, Cat cat) {
		System.out.println(dog);
		System.out.println(cat);
		return null;
	}
}

ModelAttributeController.java

package com.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;

import com.bean.User;//name和age属性,以及get,set方法和tostring方法

@Controller
public class ModelAttributeController {
	/**
	 * 在SpringMVC中,如果使用的是对象来接收参数,默认会把该对象放入到
	 * Model对象中去共享,key为对象的类型首字母小字,如:User对象的key为user
	 * @param u
	 * @return
	 */
	@GetMapping("/m1")
	public String method1(User u) {
		System.out.println(u);
		return "result";
	}
	
	/**
	 * 如果相要key的名称自己指定,需要使用@ModelAttribute来实现
	 */
	@GetMapping("/m2")
	public String method2(@ModelAttribute("_user") User u) {
		System.out.println(u);
		return "result";
	}
	
	/**
	 * 如果把@ModelAttribute标注在一个非请求方法上,那么在执行
	 * 当前Controller中的任意一个方法之前都会自动先执行此方法。
	 * 
	 * 作用:可以实现多方法之间数据共享。一般不怎么使用,了解一下即可
	 */
	@ModelAttribute
	public void myInit() {
		System.out.println("-----------------");
	}	
}

在使用json前还需加3个依赖文件:
pom.xml

<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.10.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.10.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.10.1</version>
		</dependency>

JSONController.java

package com.web.controller;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.bean.User;

// 测试json
//@Controller
@RestController // 当控制器所有方法都返回JSON数据格式时,可以使用此注解,它是@Controller和@ResponseBody的组合
@RequestMapping("/json")
public class JSONController {
	/**
	 * 请求的数据格式:
	 * 1)application/x-www-form-urlencoded,表示以字符串的形式传递参数,参数中包含key和value。
	 * 2)application/multipart,多用于文件上传,在SpringMVC中对它使用包装(装饰模式),可以接收普通数据,也可以接收上文件。
	 * 3)application/json,用于传递json格式的数据,它是以文本方式进行传递的
	 * 4)application/xml,用于传递xml格式的数据,它是以文本方式进行传递的
	 * 
	 * 1、@ResponseBody:用于把对象转换为JSON格式的数据输出,从后端传JSON数据到前端
	 * 2、@RequestBody:用于接收JSON格式的数据,从前端传JSON数据到后端
	 */
	
	// 把普通字符串转为Json数据
	@GetMapping(value="/test1", produces="application/json;charset=utf-8")
	//@ResponseBody
	public String test1() {
		return "hello,黄飞鸿";
	}
	
	// 把单个对象转JSON格式的数据
	@GetMapping("/test2")
	//@ResponseBody
	public User test2() {
		User u = new User();
		u.setName("张三");
		u.setAge(19);
		return u;
	}
	
	// 把多个对象转JSON格式的数据
	@GetMapping("/test3")
	//@ResponseBody
	public List<User> test3() {
		User u = new User();
		u.setName("张三");
		u.setAge(19);
		return Arrays.asList(u, u);
	}
	
	// 把Map对象转JSON格式的数据
	@GetMapping("/test4")
	//@ResponseBody
	public Map<Integer, User> test4() {
		User u1 = new User();
		u1.setName("张三");
		u1.setAge(19);
		
		User u2 = new User();
		u2.setName("李四");
		u2.setAge(18);
		
		Map<Integer, User> map = new HashMap<>();
		map.put(1, u1);
		map.put(2, u2);
		
		return map;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值