📜  Spring – REST XML 响应

📅  最后修改于: 2022-05-13 01:55:23.526000             🧑  作者: Mango

Spring – REST XML 响应

REST API 的受欢迎程度与日俱增,因为它以方便的方式实现了应用程序的架构。 REST API 是“代表性状态转移”的首字母缩写词。它也称为 RESTful Web 服务。它也是一个“控制器”,但不同的是,Rest Controller 返回数据,而控制器返回“模型-视图-控制器”架构的视图。 REST API 可以用于所有 HTTP 方法,例如(GET、POST、PUT、PATCH、DELETE 等)。这些方法分别对应于创建、读取、更新和删除 (CRUD) 操作。它可以返回多种类型的数据。 JSON 被认为是 Web 应用程序之间数据传输的标准格式。

REST API 可以返回的数据类型如下:

  1. JSON(JavaScript 对象表示法)
  2. XML
  3. HTML
  4. XLT
  5. Python
  6. PHP
  7. 纯文本

XML 的优点如下:

  1. 它是一种使用标签进行数据定义的可扩展标记语言。
  2. 它支持命名空间。
  3. 它支持评论。
  4. 它支持各种编码。
  5. 最后但同样重要的是,XML 比 JSON 更安全。

注意

  • 由于浏览器中没有 JSON 解析器,JSON 的安全性较低。
  • JSONP 很危险,因为它允许跨域交换数据。

REST API – XML 响应

  • 当我们创建一个具有“Starter Web”依赖项的 Spring Boot 项目时,我们只能在 Jackson 库的帮助下获得以 JSON 格式返回数据的支持。
  • 要嵌入对以 XML 格式返回数据的支持,我们需要第三方依赖项。
  • 有许多库支持 XML 返回格式,例如——Jackson、JAXB 等。

Rest XML 响应的工作

项目结构——Maven

方式1:使用杰克逊

Jackson 库已经存在于我们应用程序的 Spring 框架的类路径中。我们只需要向 Jackson 库添加一个可以处理 XML 数据响应的扩展。要添加扩展,请在项目构建中添加以下依赖项。

Maven – pom.xml


    com.fasterxml.jackson.dataformat
    jackson-dataformat-xml

添加上述依赖项并更新项目后,Jackson XML 扩展将被添加到类路径中,因此 Spring MVC 将自动为 XML 响应选择它。

A. 文件: pom.xml(项目配置)

例子:

XML


    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.6.3
         
    
    sia
    GFG-RestXMLResponse
    0.0.1-SNAPSHOT
    GFG-RestXMLResponse
    GeeksforGeeks
    
        11
    
    
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        
          
        
            com.fasterxml.jackson.dataformat
            jackson-dataformat-xml
        
          
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
  
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


Java
// Java Program to Illustrate Bootstrapping of Application
  
package gfg;
  
// Importing required classes
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
  
// Annotation
@SpringBootApplication
  
// Class
public class GfgRestXmlResponseApplication {
  
    // Main driver method
    public static void main(String[] args)
    {
        SpringApplication.run(
            GfgRestXmlResponseApplication.class, args);
    }
}


Java
// Java Program Illustrating Object to be return as XML
// response
  
package gfg;
  
// Importing required classes
import lombok.Data;
  
// Annotation
@Data
  
// Class
public class EntityModel {
  
    // Class data members
    String ID;
    String NAME;
    String DOB;
    String PINCODE;
}


Java
// Java Program Illustrating REST API returning XML response
  
package gfg;
  
// Importing required classes
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
  
// Annotations
@RestController
@RequestMapping(path = "/xml-output",
                produces = "application/xml")
  
// Class
public class RestXMLResponseController {
  
    @GetMapping("/get")
    public ResponseEntity get()
    {
  
        EntityModel model = new EntityModel();
        model.setID("1");
        model.setNAME("Darshan.G.Pawar");
        model.setDOB("05-09-2001");
        model.setPINCODE("422 009");
  
        HttpHeaders hearders = new HttpHeaders();
        ResponseEntity entityModel
            = new ResponseEntity<>(model, hearders,
                                   HttpStatus.CREATED);
  
        return entityModel;
    }
  
    // Annotation
    @GetMapping("/get/{id}")
  
    // Class
    public ResponseEntity
    getById(@PathVariable("id") String id)
    {
  
        EntityModel model = new EntityModel();
        model.setID(id);
        model.setNAME("Darshan.G.Pawar");
        model.setDOB("05-09-2001");
        model.setPINCODE("422 009");
  
        HttpHeaders hearders = new HttpHeaders();
        ResponseEntity entityModel
            = new ResponseEntity<>(model, hearders,
                                   HttpStatus.CREATED);
  
        return entityModel;
    }
}


Java
// Java Program Illustrating Getting REST API Response
  
package gfg;
  
// Importing required classes 
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
  
// Class 
public class ConsumeXMLResponse {
   
    RestTemplate rest = new RestTemplate();
      
    public ResponseEntity get(String id) {
          
        return rest.getForEntity("http://localhost:8080/xml-output/get/{id}", 
                  EntityModel.class, id);
          
    }
}


Java
// Java Program to Illustrate Regular controller
  
package gfg;
  
// Importing required classes
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
  
// Annotation
@Controller
@RequestMapping("View")
  
// Class
public class OutputController {
  
    // Annotation
    @GetMapping("/get/{id}")
  
    public String
    getXMLOutput(@PathVariable("id") String id, Model model)
    {
  
        ConsumeXMLResponse response
            = new ConsumeXMLResponse();
        ResponseEntity responseEntity
            = response.get(id);
  
        EntityModel entity = responseEntity.getBody();
        HttpHeaders headers = responseEntity.getHeaders();
  
        model.addAttribute("xml", entity);
        model.addAttribute("XMLheaders", headers);
  
        return "View";
    }
}


HTML


 
  GeeksforGeeks 
 


Hello Geek : REST XML Response


  

Id :

           

Replaceable text


Name :

         

Replaceable text


Date Of Birth :

Replaceable text


Pincode :

      

Replaceable text


  

Headers :



Java
package gfg;
  
import javax.xml.bind.annotation.XmlRootElement;
  
import lombok.Data;
  
@XmlRootElement
@Data
public class EntityModel {
   
    String ID;
    String NAME;
    String DOB;
    String PINCODE;
}


B.应用程序的引导

示例: GfgRestXmlResponseApplication。Java

Java

// Java Program to Illustrate Bootstrapping of Application
  
package gfg;
  
// Importing required classes
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
  
// Annotation
@SpringBootApplication
  
// Class
public class GfgRestXmlResponseApplication {
  
    // Main driver method
    public static void main(String[] args)
    {
        SpringApplication.run(
            GfgRestXmlResponseApplication.class, args);
    }
}

 
C.作为 XML 响应返回的对象 (Java)

此类充当用户对象( bean ),其字段将分别映射到 XML 标记。它还需要使用“Lombok”库的“@Data”注释自动生成的 Getter/Setter 方法。要将 Lombok 库嵌入到项目中,请在项目构建中添加以下依赖项。

Maven – pom.xml


     org.projectlombok
     lombok
     true

例子:

Java

// Java Program Illustrating Object to be return as XML
// response
  
package gfg;
  
// Importing required classes
import lombok.Data;
  
// Annotation
@Data
  
// Class
public class EntityModel {
  
    // Class data members
    String ID;
    String NAME;
    String DOB;
    String PINCODE;
}

D. REST API 返回 XML 响应 (Java)

此 REST API 控制器配置为使用 @RequestMapping 注释的产生属性专门以 XML 格式返回数据。

例子:

Java

// Java Program Illustrating REST API returning XML response
  
package gfg;
  
// Importing required classes
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
  
// Annotations
@RestController
@RequestMapping(path = "/xml-output",
                produces = "application/xml")
  
// Class
public class RestXMLResponseController {
  
    @GetMapping("/get")
    public ResponseEntity get()
    {
  
        EntityModel model = new EntityModel();
        model.setID("1");
        model.setNAME("Darshan.G.Pawar");
        model.setDOB("05-09-2001");
        model.setPINCODE("422 009");
  
        HttpHeaders hearders = new HttpHeaders();
        ResponseEntity entityModel
            = new ResponseEntity<>(model, hearders,
                                   HttpStatus.CREATED);
  
        return entityModel;
    }
  
    // Annotation
    @GetMapping("/get/{id}")
  
    // Class
    public ResponseEntity
    getById(@PathVariable("id") String id)
    {
  
        EntityModel model = new EntityModel();
        model.setID(id);
        model.setNAME("Darshan.G.Pawar");
        model.setDOB("05-09-2001");
        model.setPINCODE("422 009");
  
        HttpHeaders hearders = new HttpHeaders();
        ResponseEntity entityModel
            = new ResponseEntity<>(model, hearders,
                                   HttpStatus.CREATED);
  
        return entityModel;
    }
}

输出 1:

get() 方法返回的 XML 响应

输出 2:

getById() 方法返回的 XML 响应

E.消费XML响应。 Java (获取 REST API 响应)

  • REST API 以 XML 格式返回的数据需要被消费和使用。
  • Spring Framework 借助 Spring 的“RestTemplate”提供了一种使用 REST 响应的便捷方式。
  • 它通过避免编写样板代码使我们受益。
  • RestTemplate 为我们提供了特定于 HTTP 方法的方法。
  • 这里对于 GET HTTP 请求,使用 'getForEntity()' 方法接受 URL 到 @GetMapping 方法,响应将被映射到的类和 URL 的附加对象参数。
  • 此方法将返回一个 ResponseEntity<> 对象。

Java

// Java Program Illustrating Getting REST API Response
  
package gfg;
  
// Importing required classes 
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
  
// Class 
public class ConsumeXMLResponse {
   
    RestTemplate rest = new RestTemplate();
      
    public ResponseEntity get(String id) {
          
        return rest.getForEntity("http://localhost:8080/xml-output/get/{id}", 
                  EntityModel.class, id);
          
    }
}

F.文件:OutputController。 Java (常规控制器)

此 MVC 控制器使用上述类来获取 REST API 返回的 XML 响应。此外,在获取数据后,它会返回一个修改后的视图(View.html)

例子:

Java

// Java Program to Illustrate Regular controller
  
package gfg;
  
// Importing required classes
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
  
// Annotation
@Controller
@RequestMapping("View")
  
// Class
public class OutputController {
  
    // Annotation
    @GetMapping("/get/{id}")
  
    public String
    getXMLOutput(@PathVariable("id") String id, Model model)
    {
  
        ConsumeXMLResponse response
            = new ConsumeXMLResponse();
        ResponseEntity responseEntity
            = response.get(id);
  
        EntityModel entity = responseEntity.getBody();
        HttpHeaders headers = responseEntity.getHeaders();
  
        model.addAttribute("xml", entity);
        model.addAttribute("XMLheaders", headers);
  
        return "View";
    }
}

G.文件:View.html(显示 XML 响应)

HTML



 
  GeeksforGeeks 
 


Hello Geek : REST XML Response


  

Id :

           

Replaceable text


Name :

         

Replaceable text


Date Of Birth :

Replaceable text


Pincode :

      

Replaceable text


  

Headers :

输出:

HTML 中的 REST XML 响应

方式2:使用JAXB

要使用 JAXB 库,请在构建的项目中添加以下依赖项。

文件: Maven – pom.xml


    org.codehaus.mojo
    jaxb2-maven-plugin
    2.5.0

要使其工作,您必须在将映射到 XML 响应的对象上使用同一库的 @XmlRootElement 注释。

示例:实体模型。Java

Java

package gfg;
  
import javax.xml.bind.annotation.XmlRootElement;
  
import lombok.Data;
  
@XmlRootElement
@Data
public class EntityModel {
   
    String ID;
    String NAME;
    String DOB;
    String PINCODE;
}

注意:您还可以使用 Jersey 依赖项来开发 RESTful API。使用它的主要优点是它已经有一个最终使用 JAXB 库的 JAX-RS 库。