@RequestMapping(
     value = "/{id}/addresses/{address}",
     method = RequestMethod.POST,
     headers = "Accept=application/json")
 @ResponseBody
 @Transactional
 public ResponseEntity<String> addAddressToUser(
     @PathVariable("id") Long userId,
     @PathVariable("address") Long addressId,
     @RequestBody String json) {
   TaskUser taskUser = taskusers.findOne(userId);
   HttpHeaders headers = new HttpHeaders();
   headers.add("Content-Type", "application/json; charset=utf-8");
   if (taskUser == null) {
     return new ResponseEntity<String>(headers, HttpStatus.NOT_FOUND);
   }
   Address possibleAddress = addresses.findOne(addressId);
   if (possibleAddress == null) {
     return new ResponseEntity<String>(headers, HttpStatus.NOT_FOUND);
   }
   taskUser.addAddress(possibleAddress);
   Address foundAddress = addresses.save(possibleAddress);
   taskusers.save(taskUser);
   return new ResponseEntity<String>(foundAddress.toJson(), headers, HttpStatus.CREATED);
 }
 /**
  * DELETE /addresses/{id}
  *
  * <p>Deletes an existing address.
  *
  * @param id
  * @return
  */
 @RequestMapping(
     value = "/{id}",
     method = RequestMethod.DELETE,
     headers = "Accept=application/json")
 public ResponseEntity<String> deleteFromJson(@PathVariable("id") Long id) {
   Address address = addresses.findOne(id);
   HttpHeaders headers = new HttpHeaders();
   headers.add("Content-Type", "application/text");
   if (address == null) {
     return new ResponseEntity<String>(headers, HttpStatus.NOT_FOUND);
   }
   addresses.delete(address);
   return new ResponseEntity<String>(headers, HttpStatus.OK);
 }
 /**
  * Get /addresses/
  *
  * <p>Gets a json array of all addresses.
  *
  * @return json array representation of all addresses
  */
 @RequestMapping(headers = "Accept=application/json")
 @ResponseBody
 public ResponseEntity<String> listJson() {
   HttpHeaders headers = new HttpHeaders();
   headers.add("Content-Type", "application/text; charset=utf-8");
   return new ResponseEntity<String>(
       Address.toJsonArray(addresses.findAll()), headers, HttpStatus.OK);
 }
 /**
  * POST /addresses { "text": "text of the address" }
  *
  * <p>Creates a new address.
  *
  * @param json
  * @return json containing the id of the newly created address
  */
 @RequestMapping(method = RequestMethod.POST, headers = "Accept=application/json")
 public ResponseEntity<String> createFromJson(@RequestBody String json) {
   Address createdAddress = addresses.save(Address.fromJsonToAddress(json));
   HttpHeaders headers = new HttpHeaders();
   headers.add("Content-Type", "application/text");
   return new ResponseEntity<String>(
       "{\"id\":" + createdAddress.getId() + "}", headers, HttpStatus.CREATED);
 }
 /**
  * PUT /addresses/ { "id": id, "title": "text of address", idDone: true|false }
  *
  * <p>Updates an existing address.
  *
  * @param json full json representation of the address to update
  * @return
  */
 @RequestMapping(method = RequestMethod.PUT, headers = "Accept=application/json")
 public ResponseEntity<String> updateFromJson(@RequestBody String json) {
   HttpHeaders headers = new HttpHeaders();
   headers.add("Content-Type", "application/text");
   if (addresses.save(Address.fromJsonToAddress(json)) == null) {
     return new ResponseEntity<String>(headers, HttpStatus.NOT_FOUND);
   }
   return new ResponseEntity<String>(headers, HttpStatus.OK);
 }
 /**
  * GET /addresses/{id}
  *
  * <p>Gets the full json for a address.
  *
  * @param id
  * @return json representation of the requested address, or HttpStatus.NOT_FOUND
  */
 @RequestMapping(value = "/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
 @ResponseBody
 public ResponseEntity<String> showJson(@PathVariable("id") Long id) {
   Address address = addresses.findOne(id);
   HttpHeaders headers = new HttpHeaders();
   headers.add("Content-Type", "application/text; charset=utf-8");
   if (address == null) {
     return new ResponseEntity<String>(headers, HttpStatus.NOT_FOUND);
   }
   return new ResponseEntity<String>(address.toJson(), headers, HttpStatus.OK);
 }