I am working on an API that will primary return JSON but I also want it to return XML if the client prefers to work with XML.


My controller is included below.


I can get JSON and XML to return for http://ift.tt/1wo44cp


However http://ift.tt/1wo44cp work with JSON only, XML returns HttpMediaTypeNotAcceptableException: could not find acceptable representation.


Is this because I'm trying to serialize a List<> to XML? What is the solution to work around?



package net.jkratz.bloodpressure.api.controller;

import net.jkratz.bloodpressure.api.model.Gender;
import net.jkratz.bloodpressure.api.repository.GenderRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.inject.Inject;
import java.util.List;

@RestController
@RequestMapping(value = "/gender", produces = {"application/json","application/xml"})
public class GenderController {

@Inject
GenderRepository genderRepository;

private Logger logger = LoggerFactory.getLogger(getClass());

@RequestMapping(value = {"","/"}, method = RequestMethod.GET)
public ResponseEntity<List<Gender>> getGenders(@RequestHeader("Accept") String acceptHeader) {
logger.info("Serving resource for Accept header: {}", acceptHeader);
List<Gender> genders = genderRepository.findAll();
return new ResponseEntity<>(genders, HttpStatus.OK);
}

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<Gender> getGender(@PathVariable("id") Integer id, @RequestHeader("Accept") String acceptHeader) {
logger.info("Serving resource for Accept header: {}", acceptHeader);
return new ResponseEntity<>(genderRepository.findOne(id), HttpStatus.OK);
}
}

No comments:

Post a Comment