Java tutorial
package com.salmon.security.xacml.demo.springmvc.rest.controller; import java.io.BufferedReader; import java.net.URI; import java.util.Iterator; import java.util.List; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Part; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ExceptionHandler; 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.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.util.UriComponentsBuilder; import org.springframework.http.converter.HttpMessageNotReadableException; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.salmon.security.xacml.demo.springmvc.controller.IMarketPlaceController; import com.salmon.security.xacml.demo.springmvc.domain.Driver; import com.salmon.security.xacml.demo.springmvc.domain.DriverList; import com.salmon.security.xacml.demo.springmvc.domain.Vehicle; @Controller @RequestMapping("/populators/dvla") public class MarketPlacePopulatorController { private static Logger LOG = LoggerFactory.getLogger(MarketPlaceQueryController.class); @Autowired IMarketPlaceController marketPlaceController; @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json", value = "driveradd") @ResponseStatus(HttpStatus.CREATED) @ResponseBody public ResponseEntity<Driver> createDriver(@RequestBody Driver driver, UriComponentsBuilder builder) { marketPlaceController.registerDriver(driver); HttpHeaders headers = new HttpHeaders(); URI newDriverLocation = builder.path("/aggregators/dvla/drivers/{license}") .buildAndExpand(driver.getDriversLicense()).toUri(); LOG.info("REST CREATE DRIVER - new driver @ " + newDriverLocation.toString()); headers.setLocation(newDriverLocation); Driver newDriver = marketPlaceController.getDriverDetails(driver.getDriversLicense()); return new ResponseEntity<Driver>(newDriver, headers, HttpStatus.CREATED); } @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json", value = "vehicleadd") @ResponseStatus(HttpStatus.CREATED) @ResponseBody public ResponseEntity<Vehicle> createVehicle(@RequestBody Vehicle vehicle, UriComponentsBuilder builder) { LOG.info("REST CREATE Vechicle - " + vehicle.toString()); marketPlaceController.registerVehicle(vehicle); HttpHeaders headers = new HttpHeaders(); URI newVehicleLocation = builder.path("/aggregators/dvla/vehicles/{plate}") .buildAndExpand(vehicle.getPlate()).toUri(); LOG.info("REST CREATE VEHICLE - new vehicle @ " + newVehicleLocation.toString()); headers.setLocation(newVehicleLocation); return new ResponseEntity<Vehicle>(vehicle, headers, HttpStatus.CREATED); } @RequestMapping(method = RequestMethod.POST, produces = "application/json", value = "reset") @ResponseStatus(HttpStatus.OK) @ResponseBody public Integer eraseAllData() { LOG.info("REST ERASE ALL DATA"); int drivers = marketPlaceController.eraseAllDrivers(); int vehicles = marketPlaceController.eraseAllVehicles(); return new Integer(drivers + vehicles); } /* @RequestMapping(method = RequestMethod.GET, value = "vehicles") public ResponseEntity<Vehicle> createVehicle(@RequestBody Vehicle vehicle, UriComponentsBuilder builder) { marketPlaceController.registerVehicle(vehicle); Vehicle newVehicle = marketPlaceController.getVehicleDetails(vehicle.getPlate()); HttpHeaders headers = new HttpHeaders(); headers.setLocation( builder.path("/aggregators/vehicles/{plate}") .buildAndExpand(vehicle.getPlate()).toUri()); return new ResponseEntity<Vehicle>(newVehicle, headers, HttpStatus.CREATED); } @RequestMapping(method = RequestMethod.GET, value = "xxx") @ResponseStatus(HttpStatus.OK) @ResponseBody public DriverList createDrivers() { LOG.info("REST Driver LIST"); marketPlaceController.registerDriver(new Driver("BARAK", "OBAMA", "OBAMALIC2015")); marketPlaceController.registerDriver(new Driver("DAVID", "CAMERON", "CAMERONLIC2014")); marketPlaceController.registerDriver(new Driver("HUGO", "CHAVEZ", "CHAVEZLIC2016")); return marketPlaceController.listDrivers(); } @RequestMapping(method = RequestMethod.GET, value = "vehicles") @ResponseStatus(HttpStatus.OK) @ResponseBody public List<Vehicle> createVehicles() { LOG.info("REST Driver LIST"); marketPlaceController.registerVehicle(new Vehicle("AUDI", "A3", "XX34GBR")); marketPlaceController.registerVehicle(new Vehicle("AUDI", "Q5", "AB77UGN")) ; marketPlaceController.registerVehicle(new Vehicle("AUDI", "TT", "CD95HTT")) ; return marketPlaceController.listVehicles(); } */ @ExceptionHandler(HttpMessageNotReadableException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public void whenPayloadIsStrange(HttpServletRequest request, HttpMessageNotReadableException ex) { StringBuilder sb = new StringBuilder("REQUEST PARTS: "); LOG.info("************************ JSON ERROR ************************ "); LOG.info("ContentType " + request.getContentType()); LOG.info("ContentLength " + request.getContentLength()); StringBuffer jb = new StringBuffer(); String line = null; try { BufferedReader reader = request.getReader(); while ((line = reader.readLine()) != null) jb.append(line); } catch (Exception e) { /*report an error*/ } LOG.info("************************ JSON PARSING ************************ "); LOG.info("Payload: " + jb.toString()); try { ObjectMapper mapper = new ObjectMapper(); JsonFactory factory = mapper.getFactory(); JsonParser jp = factory.createParser(jb.toString()); JsonNode actualObj = mapper.readTree(jp); LOG.info("JSON OBJECT CREATED: " + actualObj.toString()); ObjectMapper driverMapper = new ObjectMapper(); Driver jsonDriver = driverMapper.readValue(actualObj.toString(), Driver.class); LOG.info("DRIVER OBJECT CREATED: " + jsonDriver.toString()); } catch (Exception e) { LOG.error("JSON Parsing Exception " + e.getMessage()); } } }