1.想將服務器中的數據返回給客戶端,需要在controller類上加注解:@ResponseBody;
這個注解其實在前面已經使用過,@RestController其實就包含兩個注解:
@Controller
@ResponseBody
返回值如果是實體對象/集合,將會轉換為json格式響應
2.統一響應結果:
如果響應的結果格式不一致,會導致前端處理數據非常麻煩,所以我們可以使用一個result對象來存儲響應信息:
3.案例:
?
package new_start.new_start4.controller;import new_start.new_start4.pojo.Emp; import new_start.new_start4.pojo.Result; import new_start.new_start4.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")public Result list(){String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();System.out.println(file);List<Emp> empList = XmlParserUtils.parse(file, Emp.class);empList.stream().forEach(emp -> {String gender = emp.getGender();if ("1".equals(gender)) {emp.setGender("男");}else if("2".equals(gender)){emp.setGender("女");}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 new Result(1, "success", empList);}}
但是我們在實際開發中往往使用三層架構:
4.
具體代碼:
注意:在service層中需要有一個創建dao對象的步驟:
private EmpDao empdao = new EmpDaoImpl();
同樣的在controller層中有一個創建service對象的步驟
private EmpService empService = new EmpServiceImpl();
5.即使這樣分層架構,各層之間仍然有耦合性,比如我更改service實現類的名字,那么我就需要在controller層創建對象的時候改代碼,這樣不利于后期維護;
所以我們需要進行分層解耦,這需要用到控制反轉和依賴注入;
我們首先需要將各層實現類進行注解@Component, 將其交給ioc容器,然后使用注解@autowired進行依賴注入
聲明bean的時候可以用value來設定bean名,默認為類名首字母小寫;
想要聲明的bean生效,還需要進行掃描,使用注解@ConponentScan;
但是該注解包含在了啟動類聲明注解上@SpringBootApplication,掃描范圍是所在包及其子包
掃描格式:@ConponentScan({"dao", "com.itheima"}) 小括號包書名號,書名號內寫包名,之間用逗號隔開;
6.
@Autowired默認是根據類型進行注入的,如果有多個相同類型的bean,則可以使用@primary進行解決;
或者是@Qualifier
或者是@Resource