Ошибка 406 при получении деталей в REST и Hibernate - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь получить информацию о странах в XML, используя REST и hibernate. Но при нажатии на URL ниже я получаю ошибку. Я установил, что заголовок в запросе правильно принимает значение xml.

The resource identified by this request is only capable of generating 
responses with characteristics not acceptable according to the request 
"accept" headers.

CONTROLLER

@RequestMapping(value = "/getAllCountries", method = 
RequestMethod.GET,produces="application/xml",
    headers = "Accept=application/xml")
public List<Country> getCountries() throws CustomerNotFoundException{

List<Country> listOfCountries = countryService.getAllCountries();
return listOfCountries;
}

MODEL

@XmlRootElement (name = "COUNTRY")
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name="COUNTRY")
public class Country{

@XmlAttribute
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
int id;

@XmlElement
@Column(name="countryName")
String countryName; 

@XmlElement
@Column(name="population")
long population;

public Country() {
super();
}

СЕРВИС

@Transactional
public List<Country> getAllCountries() {
    return countryDao.getAllCountries();
}

DAO

public List<Country> getAllCountries() {
    Session session = this.sessionFactory.getCurrentSession();
    List<Country> countryList = session.createQuery("from Country").list();
    return countryList;
}

Может кто-нибудь, пожалуйста, помогите ..

1 Ответ

0 голосов
/ 03 июля 2018

Рекомендуется использовать пружину jackson-dataformat-xml библиотека в pom.xml. Он выполнит автоматическое преобразование XML для вас, как только появится библиотека JAXB (которая встроена в JDK> = 1.6), даже без аннотаций XML. Тем не менее, вы можете использовать @JacksonXml.. аннотации для придания желаемой структуры вашему XML.

Для достижения желаемого результата я создам класс-оболочку и обновлю свой контроллер, как показано ниже:

//pom.xml
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

//wrapper class
@JacksonXmlRootElement(localName = "countries")
@Data //lombok
@AllArgsConstructor //lombok
public class Countries {

    @JacksonXmlElementWrapper(useWrapping = false)
    @JacksonXmlProperty(localName = "country")
    private List<Country> countries;

}

//controller
@RequestMapping(value = "/getAllCountries", method = RequestMethod.GET)
public Object getCountries() throws CustomerNotFoundException{
 return new Countries(countryService.getAllCountries());
}

ПРИМЕЧАНИЕ: Класс XML Wrapper здесь не требуется. Spring прекрасно справится с преобразованием массива по умолчанию, используя <List><Items>, но рекомендуется формировать ваш XML в соответствии с желаемой структурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...