Feignのコーデック使用

5190 ワード

一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 "success";
    }
}

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クライアント依存度の増加
            
                  io.github.openfeign
                  feign-jaxb
                  9.5.0
            
            
                  javax.xml.bind
                  jaxb-api
                  2.2.8
            

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