Feign的编解码使用

一 JSON编码器的使用

1 编写服务端的控制器

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyRestController {
    @RequestMapping(value = "/person/create", method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_JSON_VALUE)
    public String createPerson(@RequestBody Person p) {
        System.out.println(p.getName() + "---" + p.getAge());
        return "success, id: " + p.getId();
    }
    
}

2 编写客户端接口


package org.crazyit.cloud;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import feign.Headers;
import feign.Param;
import feign.RequestLine;

public interface HelloClient {
    @RequestLine("POST /person/createXML")
    @Headers("Content-Type: application/xml")
    public Result createXMLPerson(Person p);

}

3 编写测试方法

package org.crazyit.cloud;

import feign.Feign;
import feign.gson.GsonEncoder;

public class JsonTest {

    public static void main(String[] args) {
        HelloClient client = Feign.builder()
                .encoder(new GsonEncoder())
                .target(HelloClient.class,
                "http://localhost:8080");
        Person p = new Person();
        p.setAge(33);
        p.setId(1);
        p.setName("angus");
        String result = client.createPerson(p);
        System.out.println(result);
    }

}

4 启动服务端

5 测试结果

success, id: 1

二 XML的编码和解密

1 服务端编写

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyRestController {

    /**
     * 参数与返回值均为XML
     */
    @RequestMapping(value = "/person/createXML", method = RequestMethod.POST,
            consumes = MediaType.APPLICATION_XML_VALUE,
            produces = MediaType.APPLICATION_XML_VALUE)
    public String createXMLPerson(@RequestBody Person person) {
        System.out.println(person.getName() + "-" + person.getId());
        return "<result><message>success</message></result>";
    }
}

2 编写客户端接口

package org.crazyit.cloud;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

import feign.Headers;
import feign.Param;
import feign.RequestLine;

public interface HelloClient {
    @RequestLine("POST /person/createXML")
    @Headers("Content-Type: application/xml")
    public Result createXMLPerson(Person p);

}

3 客户端增加依赖

            <dependency>
                  <groupId>io.github.openfeign</groupId>
                  <artifactId>feign-jaxb</artifactId>
                  <version>9.5.0</version>
            </dependency>
            <dependency>
                  <groupId>javax.xml.bind</groupId>
                  <artifactId>jaxb-api</artifactId>
                  <version>2.2.8</version>
            </dependency>

4 编写Result

package org.crazyit.cloud;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlRootElement
public class Result {

    @XmlElement
    private String message;

    @XmlTransient
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
    
} 

5 编写测试方法

package org.crazyit.cloud;

import feign.Feign;
import feign.jaxb.JAXBContextFactory;
import feign.jaxb.JAXBDecoder;
import feign.jaxb.JAXBEncoder;

public class XmlTest {

    public static void main(String[] args) {
        JAXBContextFactory jaxbFactory = new JAXBContextFactory.Builder().build();
        // 获取服务接口
        HelloClient client = Feign.builder()
                .encoder(new JAXBEncoder(jaxbFactory))
                .decoder(new JAXBDecoder(jaxbFactory))
                .target(HelloClient.class, "http://localhost:8080/");
        // 构建参数
        Person p = new Person();
        p.setId(1);
        p.setName("angus");
        p.setAge(33);
        // 调用接口并返回结果
        Result result = client.createXMLPerson(p);
        System.out.println(result.getMessage());
    }

}

6 启动服务

7 测试

客户端输出

success

服务端输出

angus-1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值