赞
踩
黑马程序员JavaWeb开发教程
package com.itheima.conttoller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//测试简单参数
@RestController
public class RequestController {
@RequestMapping("/simpleParam")
public String simpleParam(String name, Integer age) {
System.out.println(name + " : " + age);
return "ok";
}
}
重新启动项目,在postman中输入以下地址:http://localhost:8080/simpleParam 并设置两个参数,name和age,点击send按钮,会看到返回结果
注意事项:如果方法形参名称与请求参数名称不匹配,可以使用@RequestParam完成映射
注意事项:@RequestParam中的required属性默认为true,代表该请求参数必须传递,如果不传递将报错。如果该参数是可选的,可以将required属性设置为false
package com.itheima.pojo; public class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
@RequestMapping("/simplePojo")
public String simplePojo(User user){
System.out.println(user);
return "OK";
}
package com.itheima.pojo; public class Address { private String province; private String city; @Override public String toString() { return "Address{" + "province='" + province + '\'' + ", city='" + city + '\'' + '}'; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
@RequestMapping("/complexPojo")
public String complexPojo(User user){
System.out.println(user);
return "OK";
}
重启项目,在Postman中设置相应配置
@RequestMapping("/arrayParam")
public String arrayParam(String[] hobby) {
System.out.println(Arrays.toString(hobby));
return "OK";
}
重启项目,配置postman
@RequestMapping("/listParam")
public String listParam(@RequestParam List<String> hobby) {
System.out.println(hobby);
return "OK";
}
重启项目,配置postman
@RequestMapping("/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
System.out.println(updateTime);
return "OK";
}
重启项目,配置postman
@RequestMapping("/jsonParam")
public String jsonParam(@RequestBody User user) {
System.out.println(user);
return "OK";
}
重启项目,配置postman
-路径参数:通过请求URL直接传递参数,使用{…}来标识该路径参数,需要使用@PathVariable获取路径参数
@RequestMapping("/pathParam/{id}")
public String pathParam(@PathVariable Integer id) {
System.out.println(id);
return "OK";
}
重启项目,配置postman
可以传递多个路径参数,使用/分隔开即可
package com.itheima.pojo; /** * 统一响应结果封装类 */ public class Result { private Integer code ;//1 成功 , 0 失败 private String msg; //提示信息 private Object data; //数据 data public Result() { } public Result(Integer code, String msg, Object data) { this.code = code; this.msg = msg; this.data = data; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public static Result success(Object data){ return new Result(1, "success", data); } public static Result success(){ return new Result(1, "success", null); } public static Result error(String msg){ return new Result(0, msg, null); } @Override public String toString() { return "Result{" + "code=" + code + ", msg='" + msg + '\'' + ", data=" + data + '}'; } }
package com.itheima.conttoller; import com.itheima.pojo.Address; import com.itheima.pojo.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.List; @RestController public class TestController { @RequestMapping("/helloworld") public Result hello() { System.out.println("Hello world~"); return Result.success("OK"); } @RequestMapping("/getAddr") public Result getAddr() { Address addr = new Address(); addr.setProvince("广东"); addr.setCity("深圳"); return Result.success(addr); } @RequestMapping("/listAddr") public Result listAddr() { List<Address> list = new ArrayList<>(); Address addr = new Address(); addr.setProvince("广东"); addr.setCity("深圳"); Address addr1 = new Address(); addr1.setProvince("陕西"); addr1.setCity("西安"); list.add(addr); list.add(addr); return Result.success(list); } }
<!-- 解析XML -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
2. 引入解析XML的工具类XMLParserUtils、对应的实体类Emp、XML文件emp.xml
(1)引入解析XML的工具类XMLParserUtils
XmlParserUtils的代码如下:
package com.itheima.utils; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; public class XmlParserUtils { public static <T> List<T> parse(String file , Class<T> targetClass) { ArrayList<T> list = new ArrayList<T>(); //封装解析出来的数据 try { //1.获取一个解析器对象 SAXReader saxReader = new SAXReader(); //2.利用解析器把xml文件加载到内存中,并返回一个文档对象 Document document = saxReader.read(new File(file)); //3.获取到根标签 Element rootElement = document.getRootElement(); //4.通过根标签来获取 user 标签 List<Element> elements = rootElement.elements("emp"); //5.遍历集合,得到每一个 user 标签 for (Element element : elements) { //获取 name 属性 String name = element.element("name").getText(); //获取 age 属性 String age = element.element("age").getText(); //获取 image 属性 String image = element.element("image").getText(); //获取 gender 属性 String gender = element.element("gender").getText(); //获取 job 属性 String job = element.element("job").getText(); //组装数据 Constructor<T> constructor = targetClass.getDeclaredConstructor(String.class, Integer.class, String.class, String.class, String.class); constructor.setAccessible(true); T object = constructor.newInstance(name, Integer.parseInt(age), image, gender, job); list.add(object); } } catch (Exception e) { e.printStackTrace(); } return list; } }
(2)引入对应的实体类Emp
Emp类的代码如下
package com.itheima.pojo; public class Emp { private String name; private Integer age; private String image; private String gender; private String job; public Emp() { } public Emp(String name, Integer age, String image, String gender, String job) { this.name = name; this.age = age; this.image = image; this.gender = gender; this.job = job; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } @Override public String toString() { return "Emp{" + "name='" + name + '\'' + ", age=" + age + ", image='" + image + '\'' + ", gender='" + gender + '\'' + ", job='" + job + '\'' + '}'; } }
(3)引入XML文件emp.xml
将emp.xml文件放到resources目录下
emp.xml文件中的代码如下:
<?xml version="1.0" encoding="UTF-8" ?> <emps> <emp> <name>金毛狮王</name> <age>55</age> <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/1.jpg</image> <!-- 1: 男, 2: 女 --> <gender>1</gender> <!-- 1: 讲师, 2: 班主任 , 3: 就业指导 --> <job>1</job> </emp> <emp> <name>白眉鹰王</name> <age>65</age> <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/2.jpg</image> <gender>1</gender> <job>1</job> </emp> <emp> <name>青翼蝠王</name> <age>45</age> <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/3.jpg</image> <gender>1</gender> <job>2</job> </emp> <emp> <name>紫衫龙王</name> <age>38</age> <image>https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/4.jpg</image> <gender>2</gender> <job>3</job> </emp> </emps>
引入静态页面文件,放在resources下的static目录下(前端静态页面存放在资料中)
package com.itheima.controller; import com.itheima.pojo.Emp; import com.itheima.pojo.Result; import com.itheima.utils.XmlParserUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class EmpController { @RequestMapping("/listEmp")//路径,看前端页面emp.html中的钩子方法 public Result list() {//前端页面emp.html的钩子方法没有返回数据,也就不需要有参数 // 1、加载并解析xml文件 // (1)获得xml文件地址 String file = this.getClass().getClassLoader().getResource("emp.xml").getFile(); System.out.println("emp.xml文件地址:" + file); // (2)使用之前引入的工具类XmlParserUtils解析xml文件 List<Emp> empList = XmlParserUtils.parse(file, Emp.class); // 2、对数据进行转换(将1,2转换成男女等) for (Emp emp : empList) { // (1)处理gender- 1:男, 2:女 String gender = emp.getGender(); if ("1".equals(gender)) { emp.setGender("男"); } else if ("2".equals(gender)) { emp.setGender("女"); } // (2)处理job- 1:讲师, 2:班主任, 3:就业指导 String job = emp.getJob(); if ("1".equals(job)) { emp.setJob("讲师"); } else if ("2".equals(job)) { emp.setJob("班主任"); } else if ("3".equals(job)) { emp.setJob("就业指导"); } } // 3、响应数据 return Result.success(empList); } }
最终项目结构
在dao目录下创建接口类EmpDao
其中的代码:
package com.itheima.dao;
import com.itheima.pojo.Emp;
import java.util.List;
public interface EmpDao {
//获取员工列表数据
public List<Emp> listEmp();
}
在dao目录下新建impl目录,在impl目录下新建EmpDaoA类,继承接口EmpDao
其中代码
package com.itheima.dao.impl; import com.itheima.dao.EmpDao; import com.itheima.pojo.Emp; import com.itheima.utils.XmlParserUtils; import java.util.List; public class EmpDaoA implements EmpDao { @Override public List<Emp> listEmp() { // 1、加载并解析xml文件 // (1)获得xml文件地址 String file = this.getClass().getClassLoader().getResource("emp.xml").getFile(); System.out.println("emp.xml文件地址:" + file); // (2)使用之前引入的工具类XmlParserUtils解析xml文件 List<Emp> empList = XmlParserUtils.parse(file, Emp.class); return empList; } }
为增强灵活性创建一个service层的接口EmpService
其中的代码:
package com.itheima.service;
import com.itheima.pojo.Emp;
import java.util.List;
public interface EmpService {
//获取员工列表
public List<Emp> listEmp();
}
在service目录下新建impl目录,在impl目录下新建EmpServiceA类
EmpServiceA类代码
package com.itheima.service.impl; import com.itheima.dao.EmpDao; import com.itheima.dao.impl.EmpDaoA; import com.itheima.pojo.Emp; import com.itheima.service.EmpService; import java.util.List; public class EmpServiceA implements EmpService { private EmpDao empDao = new EmpDaoA(); @Override public List<Emp> listEmp() { List<Emp> empList = empDao.listEmp(); // 2、对数据进行转换(将1,2转换成男女等) for (Emp emp : empList) { // (1)处理gender- 1:男, 2:女 String gender = emp.getGender(); if ("1".equals(gender)) { emp.setGender("男"); } else if ("2".equals(gender)) { emp.setGender("女"); } // (2)处理job- 1:讲师, 2:班主任, 3:就业指导 String job = emp.getJob(); if ("1".equals(job)) { emp.setJob("讲师"); } else if ("2".equals(job)) { emp.setJob("班主任"); } else if ("3".equals(job)) { emp.setJob("就业指导"); } } return empList; } }
package com.itheima.controller; import com.itheima.pojo.Emp; import com.itheima.pojo.Result; import com.itheima.service.EmpService; import com.itheima.service.impl.EmpServiceA; import com.itheima.utils.XmlParserUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class EmpController { private EmpService empService= new EmpServiceA(); @RequestMapping("/listEmp")//路径,看前端页面emp.html中的钩子方法 public Result list() {//前端页面emp.html的钩子方法没有返回数据,也就不需要有参数 //使用service获得处理之后的数据 List<Emp> empList = empService.listEmp(); // 3、响应数据 return Result.success(empList); } }
将EmpController中的new EmpServiceA删除
将EmpServiceA中的new EmpDaoA删除
在EmpServiceA和EmpDaoA的前边加上注解@Component
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注释之一
注意事项
@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报错
可以通过一下几种方案来解决
@Primary:在想要使用的bean的注解前边加上@Primary注解,再次运行就不会出现报错了
@Autowired+@Qualifier(“bean的名称”)
@Resource(name=“bean的名称”)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。