現在、pure javaを使ってREST/Jsonで通信するプログラムを作っているのですが、
responseをPOJOに格納しようとして失敗しています。
(jarsey1.19.1を使用しています。)
sendRequestメソッド内を
TestDto testDto=response.getEntity(TestDto.class);
と書きたいのですが、ClientHandlerExceptionが出てしまいます。
色々と調べてはみたのですが、解決に至らなかったので
お知恵を拝借できないでしょうか。
import java.net.URI; import java.net.URISyntaxException; import java.util.HashMap; import javax.ws.rs.core.MediaType; import net.arnx.jsonic.JSON; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.api.json.JSONConfiguration; public class RestClient { public String getString(String url, MediaType type) { Client client = getClient(); WebResource resource = client.resource(url); ClientResponse response = resource.accept(type).get(ClientResponse.class); switch (response.getStatus()) { case 200 : // OK break; default: return String.format("Code:%s Entity:%s", response.getStatus(), response.getEntity(String.class)); } return response.getEntity(String.class); } public Client getClient() { ClientConfig config = new DefaultClientConfig(); config.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); Client client = Client.create(config); return client; } @SuppressWarnings("finally") public Object sendRequest(String uri,String method,Object entity){ RestClient restClient=new RestClient(); Client client=restClient.getClient(); ClientRequest.Builder builder=ClientRequest.create(); builder.type(MediaType.APPLICATION_JSON_TYPE).entity(JSON.encode(entity)); ClientRequest request; Object json = null; try { request = builder.build(new URI(uri), method); ClientResponse response=client.handle(request); String str=response.getEntity(String.class); json=JSON.decode(str); } catch (URISyntaxException e) { e.printStackTrace(); }finally{ return json; } } }
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class TestDto { public String detailCode; public String telNumber; public TestDto(){ } public TestDto(String detailCode,String telNumber){ this.detailCode=detailCode; this.telNumber=telNumber; } } import java.util.HashMap; import java.util.Map; public class RestTest { public static void main(String[] args) throws URISyntaxException{ String uri=""; Map<String, String> entity=new HashMap<String, String>(); entity.put("serviceKubun", "1"); entity.put("telNumber", "0312345678"); entity.put("systemidentifier", "ABC"); Map<String,Map<String,String>> parent = new HashMap<String,Map<String,String>>(); parent.put("request", entity); String method="POST"; RestClient client=new RestClient(); Object json=client.sendRequest(uri, method, parent); } }
エラーログ
重大: A message body reader for Java class *******.rest.TestDto, and Java type class ********.rest.TestDto, and MIME media type application/json; charset=utf-8 was not found [月 8 08 13:26:17 JST 2016] 重大: The registered message body readers compatible with the MIME media type are: application/json; charset=utf-8 -> com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App */* -> com.sun.jersey.core.impl.provider.entity.FormProvider com.sun.jersey.core.impl.provider.entity.StringProvider com.sun.jersey.core.impl.provider.entity.ByteArrayProvider com.sun.jersey.core.impl.provider.entity.FileProvider com.sun.jersey.core.impl.provider.entity.InputStreamProvider com.sun.jersey.core.impl.provider.entity.DataSourceProvider com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General com.sun.jersey.core.impl.provider.entity.ReaderProvider com.sun.jersey.core.impl.provider.entity.DocumentProvider com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General com.sun.jersey.core.impl.provider.entity.EntityHolderReader com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General [月 8 08 13:26:17 JST 2016] com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class ***.rest.TestDto, and Java type class *****.rest.TestDto, and MIME media type application/json; charset=utf-8 was not found at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:630) at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:586) at ***.rest.RestClient.sendRequest(RestClient.java:54) at ***.rest.RestTest.main(RestTest.java:28)

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/08 04:08
2016/08/08 04:18
2016/08/08 05:37
退会済みユーザー
2016/08/08 06:29
2016/08/08 07:55
2016/08/08 08:33
退会済みユーザー
2016/08/08 08:52
2016/08/08 09:05
2016/08/08 10:41
2016/08/08 10:55