Created
March 10, 2012 17:54
-
-
Save kdonald/2012289 to your computer and use it in GitHub Desktop.
RestTemplate + Jackson Solr Client Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.net.URI; | |
import java.net.URISyntaxException; | |
import java.util.ArrayList; | |
import java.util.List; | |
import org.codehaus.jackson.JsonNode; | |
import org.codehaus.jackson.map.ObjectMapper; | |
import org.codehaus.jackson.node.ObjectNode; | |
import org.springframework.http.HttpStatus; | |
import org.springframework.http.MediaType; | |
import org.springframework.http.ResponseEntity; | |
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; | |
import org.springframework.http.converter.HttpMessageConverter; | |
import org.springframework.http.converter.json.MappingJacksonHttpMessageConverter; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.web.bind.annotation.RequestMapping; | |
import org.springframework.web.bind.annotation.RequestMethod; | |
import org.springframework.web.client.RestTemplate; | |
@Controller | |
public class ExampleController { | |
private ObjectMapper mapper; | |
private RestTemplate client; | |
public ExampleController() { | |
initClient(); | |
} | |
@RequestMapping(value="/nearby", method=RequestMethod.GET, produces="application/json") | |
public ResponseEntity<JsonNode> nearby() throws URISyntaxException { | |
Location location = new Location(28.0674,-80.5595); | |
// perform a spatial search: all locations within 25 miles of long/lat | |
JsonNode json = client.getForObject(new URI("http://localhost:8983/solr/select?" + | |
"wt=json&fl=*&q=*:*&fq=%7B!geofilt%7D&sfield=location&pt=" + location + "&d=25"), JsonNode.class); | |
JsonNode docs = json.get("response").get("docs"); | |
ObjectNode nearby = mapper.createObjectNode(); | |
nearby.put("nearby", docs); | |
return new ResponseEntity<JsonNode>(nearby, HttpStatus.ACCEPTED); | |
} | |
// internal helpers | |
private void initClient() { | |
client = new RestTemplate(); | |
client.setRequestFactory(new HttpComponentsClientHttpRequestFactory()); | |
mapper = new ObjectMapper(); | |
MappingJacksonHttpMessageConverter converter = new MappingJacksonHttpMessageConverter(); | |
converter.setObjectMapper(mapper); | |
List<MediaType> mediaTypes = new ArrayList<MediaType>(2); | |
mediaTypes.add(MediaType.APPLICATION_JSON); | |
// Solr returns text/plain responses for JSON results | |
mediaTypes.add(MediaType.TEXT_PLAIN); | |
converter.setSupportedMediaTypes(mediaTypes); | |
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>(1); | |
converters.add(converter); | |
client.setMessageConverters(converters); | |
} | |
// misc utility code | |
private final class Location { | |
private final Double latitude; | |
private final Double longitude; | |
public Location(Double latitude, Double longitude) { | |
this.latitude = latitude; | |
this.longitude = longitude; | |
} | |
public Double getLatitude() { | |
return latitude; | |
} | |
public Double getLongitude() { | |
return longitude; | |
} | |
public String toString() { | |
return getLatitude().toString() + "," + getLongitude().toString(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment