zoukankan      html  css  js  c++  java
  • springboot返回json和xml

    在项目中某些情况下接口需要返回的是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
    }
  • 相关阅读:
    Golang mysql数据库
    C++ list结构体变量排序
    VS2013 ERROR MSB8020
    error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation
    error C2664: “FILE *fopen(const char *,const char *)”: 无法将参数 1 从“LPCTSTR”转换为“const char *”
    error C4430: missing type specifier
    虚拟地址转物理地址
    vs2013 x64 编译汇编代码
    fs寄存器相关,PEB,TEB
    boost 1.57 vs2013 编译
  • 原文地址:https://www.cnblogs.com/echola/p/10955817.html
Copyright © 2011-2022 走看看