在項目中某些情況下接口需要返回的是xml數據或者json數據
1、在springboot項目加入依賴jackson-dataformat-xml
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.2.RELEASE</version> </dependency>
2、在pojo層添加User類
package com.example.demo.pojo; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * 被@XMLRootElement注解的類User,被描述為一個頂層的XML element */ @XmlRootElement public class User { String userName; String userAge; String userAddress; public User(String userName, String userAge, String userAddress) { this.userName = userName; this.userAge = userAge; this.userAddress = userAddress; } /** * 該注解可以將被注解的(非靜態)字段,或者被注解的get/set方法對應的字段映射為本地元素,也就是子元素。 */ @XmlElement public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @XmlElement public String getUserAge() { return userAge; } public void setUserAge(String userAge) { this.userAge = userAge; } @XmlElement public String getUserAddress() { return userAddress; } public void setUserAddress(String userAddress) { this.userAddress = userAddress; } }
3、在controller層添加UserController.java
package com.example.demo.controller; import com.example.demo.pojo.User; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { //http://localhost:8080/json @GetMapping(value = "/json",produces = MediaType.APPLICATION_JSON_VALUE) public User index(){ User user = new User("echola", "22", "深圳"); return user; } //http://localhost:8080/xml @GetMapping(value = "/xml",produces = MediaType.APPLICATION_XML_VALUE) public User XML(){ User user = new User("echola", "22", "深圳"); return user; } }
啟動項目成功后,輸入http://localhost:8080/json,頁面上的json字符串:
輸入http://localhost:8080/xml,頁面上Xml格式:
注意:
- @Controller和RestController的區別
- @RestController注解相當於@ResponseBody+@Controller合在一起的作用。但是不能返回jsp,html頁面,視圖解析器InternalResourceViewSolver不起作用,無法解析jsp,html頁面,只能返回Return中的內容
- 若返回到指定的頁面,需要@Controller配合視圖解析器才可以。如返回Json,Xml或自定義的ModiaType內容到頁面中,則需要在對應的方法上添加@ResponseBody
- @RequestMapping和@GetMapping、@PostMapping(@PutMapping、@DeleteMapping)的區別
- GetMapping用於處理Get類型的方法,@PostMapping用於處理Post類型的方法等
- 傳統的@requestMapping注釋實現URI處理程序,拿么它應該是:
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
- 新方法可以簡化為:
@GetMapping("/get/{id}")
查看@GetMapping注釋的源代碼,我們可以看到它已經通過以下方式使用RequestMethod.Get進行了注釋:
@Target({ java.lang.annotation.ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = { RequestMethod.GET }) public @interface GetMapping { // abstract codes }