2014-02-12 9 views
0

В настоящее время я пытаюсь получить информацию с этого сайта: http://freegeoip.net/json/184.71.175.150 и прочитать его содержимое в свой собственный пользовательский объект, используя Джерси.Настроить JSON с помощью Jackson, используя Джерси

Из этой ссылки https://jersey.java.net/documentation/latest/user-guide.html#json.jackson, глава 8.1.4, я написал следующий код:

final Client client = ClientBuilder.newBuilder().register(IPInfo.class).register(JacksonFeature.class).build(); 

     Response response = client.target("http://freegeoip.net/json/184.71.175.150").request(MediaType.APPLICATION_JSON).get(); 
     IPInfo ip = response.readEntity(IPInfo.class); 

Проблема в том, что код перерывы на response.readEntity линии, то «HTTP Status 500 - Ошибка чтения объекта из входной поток "показан на моем сервлете.

Это мой класс объекта:

public class IPInfo 
{ 

private String _ip; 
private String _countryCode; 
private String _countryName; 
private String _regionCode; 
private String _regionName; 
private String _city; 
private String _zipCode; 
private float _latitude; 
private float _longitude; 
private String _metroCode; 
private String _areaCode; 

public IPInfo(String ip, 
       String countryCode, 
       String countryName, 
       String regionCode, 
       String regionName, 
       String city, 
       String zipCode, 
       float latitude, 
       float longitude, 
       String metroCode, 
       String areaCode) 
{ 
    _ip = ip; 
    _countryCode = countryCode; 
    _countryName = countryName; 
    _regionCode = regionCode; 
    _city = city; 
    _zipCode = zipCode; 
    _latitude = latitude; 
    _longitude = longitude; 
    _metroCode = metroCode; 
    _areaCode = areaCode; 
    _regionName = regionName; 
} 

public String getIp() 
{ 
    return _ip; 
} 

public String getCountryCode() 
{ 
    return _countryCode; 
} 

public String getCountryName() 
{ 
    return _countryName; 
} 

public String getRegionCode() 
{ 
    return _regionCode; 
} 

public String getCity() 
{ 
    return _city; 
} 

public String getZipCode() 
{ 
    return _zipCode; 
} 

public float getLatitude() 
{ 
    return _latitude; 
} 

public float getLongitude() 
{ 
    return _longitude; 
} 

public String getMetroCode() 
{ 
    return _metroCode; 
} 

public String getAreaCode() 
{ 
    return _areaCode; 
} 

public String getRegionName() 
{ 
    return _regionName; 
} 

public void setIp(String ip) 
{ 
    _ip = _ip; 
} 

public void setCountryCode(String countryCode) 
{ 
    _countryCode = countryCode; 
} 

public void setCountryName(String countryName) 
{ 
    _countryName = countryName; 
} 

public void setRegionCode(String regionCode) 
{ 
    _regionCode = regionCode; 
} 

public void setRegionName(String regionName) 
{ 
    _regionName = regionName; 
} 

public void setCity(String city) 
{ 
    _city = city; 
} 

public void setZipCode(String zipCode) 
{ 
    _zipCode = zipCode; 
} 

public void setLatitude(float latitude) 
{ 
    _latitude = latitude; 
} 

public void setLongitude(float longitude) 
{ 
    _longitude = longitude; 
} 

public void setMetroCode(String metroCode) 
{ 
    _metroCode = metroCode; 
} 

public void setAreaCode(String areaCode) 
{ 
    _areaCode = areaCode; 
} 

} 

Любая помощь будет оценена, спасибо

ответ

0

пытаются получить ответ в виде строки первой. Убедитесь, что ответ, который вы получаете, на самом деле является JSON и что он отформатирован так же, как и ваш объект.

ClientResponse resp = service.path(PATH) 
      .type(MediaType.APPLICATION_JSON).get(ClientResponse.class); 

resp.getEntity(String.class) 

Затем вы можете проверить свой код десериализации с ObjectMapper окончательный ObjectMapper картографа = новый ObjectMapper(); mapper.readValue (resp.getEntity (String.class), КЛАСС)

+0

Вы можете шанс имена ваших полей с Аннотации JSON @JsonProperty («Имя») – pwilmot

0

я извлек информацию с сайта: http://freegeoip.net/json/184.71.175.150, и прочитать его содержимое в пользовательском объекте IPInfo использованием Джерси.

Вот мой код, чтобы проверить разобрана:

public static void main(String[] args) throws Exception { 
    Client client = Client.create(); 
    WebResource webResource = client.resource("http://freegeoip.net/json/184.71.175.150"); 
    ClientResponse response = webResource.accept("application/json") 
             .get(ClientResponse.class); 
    // Object to parser VO's 
    ObjectMapper objectMapper = new ObjectMapper(); 
    objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
    IPInfo ipInfo = objectMapper.readValue(response.getEntityInputStream(), IPInfo.class); 
} 

Примечание:

Джерси 1.x путь:

Client client = Client.create(); 
WebResource webResource = client.resource(restURL).path("myresource/{param}"); 
String result = webResource.pathParam("param", "value").get(String.class); 

JAX-RS 2.0 путь:

Client client = ClientBuilder.newClient(); 
WebTarget target = client.target(restURL).path("myresource/{param}"); 
String result = target.pathParam("param", "value").get(String.class); 

И это класс IPInfo (изменен путем добавления пустого конструктора, изменения метода setIp и форматирования. Если вам не нравится класс, отформатированный таким образом я могу отменить его: P):

public class IPInfo { 

    private String _ip; 
    private String _countryCode; 
    private String _countryName; 
    private String _regionCode; 
    private String _regionName; 
    private String _city; 
    private String _zipCode; 
    private float _latitude; 
    private float _longitude; 
    private String _metroCode; 
    private String _areaCode; 

    public IPInfo() { 

    } 

    public IPInfo(String ip, String countryCode, String countryName, 
      String regionCode, String regionName, String city, String zipCode, 
      float latitude, float longitude, String metroCode, String areaCode) { 
     _ip = ip; 
     _countryCode = countryCode; 
     _countryName = countryName; 
     _regionCode = regionCode; 
     _city = city; 
     _zipCode = zipCode; 
     _latitude = latitude; 
     _longitude = longitude; 
     _metroCode = metroCode; 
     _areaCode = areaCode; 
     _regionName = regionName; 
    } 

    public String getIp() { 
     return _ip; 
    } 

    public String getCountryCode() { 
     return _countryCode; 
    } 

    public String getCountryName() { 
     return _countryName; 
    } 

    public String getRegionCode() { 
     return _regionCode; 
    } 

    public String getCity() { 
     return _city; 
    } 

    public String getZipCode() { 
     return _zipCode; 
    } 

    public float getLatitude() { 
     return _latitude; 
    } 

    public float getLongitude() { 
     return _longitude; 
    } 

    public String getMetroCode() { 
     return _metroCode; 
    } 

    public String getAreaCode() { 
     return _areaCode; 
    } 

    public String getRegionName() { 
     return _regionName; 
    } 

    public void setIp(String ip) { 
     _ip = ip; 
    } 

    public void setCountryCode(String countryCode) { 
     _countryCode = countryCode; 
    } 

    public void setCountryName(String countryName) { 
     _countryName = countryName; 
    } 

    public void setRegionCode(String regionCode) { 
     _regionCode = regionCode; 
    } 

    public void setRegionName(String regionName) { 
     _regionName = regionName; 
    } 

    public void setCity(String city) { 
     _city = city; 
    } 

    public void setZipCode(String zipCode) { 
     _zipCode = zipCode; 
    } 

    public void setLatitude(float latitude) { 
     _latitude = latitude; 
    } 

    public void setLongitude(float longitude) { 
     _longitude = longitude; 
    } 

    public void setMetroCode(String metroCode) { 
     _metroCode = metroCode; 
    } 

    public void setAreaCode(String areaCode) { 
     _areaCode = areaCode; 
    } 

} 

Примечание: Вам нужно будет добавить @JsonProperty («Name»), как «pwilmot» говорит, для того, чтобы получить данные с составными именами с помощью «_» как «region_code» или немного изменить свой класс.

я этого не делал, потому что я хотел показать вам, что с классом (без аннотации) можно было парсера и получить данные из URI в IPInfo

Смежные вопросы