此项目基于前一个项目详情请看,里面的配置文件不用改,因此,我在这里只写了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;
}
}

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

被折叠的 条评论
为什么被折叠?



