실체으로 POJO를 통과 잭슨을 사용하는 클라이언트 :저지/JAX-RS I가 <a href="https://jersey.java.net/" rel="nofollow">Jersey</a>/JAX-RS를 사용하여 RESTful 웹 서비스 클라이언트 구현하기 위해 노력하고
public class MyClient implements Closeable {
private Client client;
private FizzResource fizzResource;
// Several other resources omitted for brevity.
// Ctor, getters and setters, etc.
@Override
public void close() throws Exception {
client.destroy();
client.getExecutorService().shutdown();
}
}
public class FizzResource {
private Client client;
public Fizz saveFizz(Fizz fizz) {
WebResource webResource = client.resource("whatever");
ClientResponse response = webResource.accept(???).post(???);
if(response.getStatus() != 200) {
// do something...
} else {
// do something else...
}
}
}
내 문제는 내가 싶지 않아입니다 JSON으로 작업하십시오. 대신 엔티티 (예 : Fizz
)와 직접 작업하고 싶습니다. 난 Jackson 자동으로 JSON과 내 엔티티 (각 메서드 내에서 명시 적으로 변환 작업을 수행하지 않고도) 사이의 직렬화 작업을 수행하고 싶지만, 이것이 가능/실행 가능하다는 것을 알지 못한다.
public Fizz saveFizz(Fizz fizz) {
WebResource webResource = client.resource("whatever");
ClientResponse response = webResource.accept("application/json").post(fizz);
if(response.getStatus() != 200) {
throw new RuntimeException("Errors are bad, mkay?");
}
Fizz fizz = response.extractSomehow();
return fizz;
}
내 Fizz
클래스가 이미 올바른 잭슨 주석 (JsonProperty
등)로 주석이 다음과 같다고 가정처럼 이상적으로 내 saveFizz
방법을 볼 수 있습니다.
아이디어가 있으십니까?
final ObjectMapper mapper = new ObjectMapper();
mapper.readValue(response.getEntity(String.class), Fizz.class);
만큼 소다가 제대로 주석이,이 당신이 찾고있는 무엇을 수행해야합니다
감사 @Calardan에 사용되는 코드의 다른 부분 (+1은) - 그러나 th at은 JSON 문자열을 'Fizz' 인스턴스로 역 직렬화하는 독립 실행 형 스 니펫입니다. 위의 실제 saveFizz 메소드 내에서 어떻게 작동합니까? 'webResource' 메쏘드에 무엇을 전달해야합니까? '응답 '에서'피즈'를 어떻게 추출 할 수 있을까요? 다시 한 번 감사드립니다! 당신이 대신의 InputStream에서 작업 할 경우 – IAmYourFaja
당신은'response.getEntity (String.class) 를 호출하여 응답의 String 표현을 얻을 수' , 당신은 단지 게시 'response.getEntityInputStream()' 을 사용할 수 있습니다 Fizz의 인스턴스를 사용하면 다음과 같이 쓸 수 있습니다 : 'ObjectMapper mapper = new ObjectMapper(); JSON 문자열을 마샬링 및 언 마샬링하는 데 매우 기본적인 솔루션입니다. – Calardan
@peeskillet이 보여 주듯이, Jersey의 클라이언트 API를 구성하거나 사용자 정의 공급자를 도입하는 고급 솔루션이있을 것입니다. 가장 적합한 것을 골라라. – Calardan