[SPRING] XML 지원을 포함한 스프링 부트 REST
SPRINGXML 지원을 포함한 스프링 부트 REST
스프링 부트 1.2.5와 함께 간단한 REST 웹 서비스를 만들었고 JSON에서도 잘 작동하지만 XML을 반환 할 수는 없다.
이것은 내 컨트롤러 다.
@RestController
..
@RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
@ResponseStatus(HttpStatus.OK)
public List<Activity> getAllActivities() {
return activityRepository.findAllActivities();
}
Accept : application / json으로 호출하면 모든 것이 작동하지만 application / xml로 시도 할 때 406이라는 HTML이 표시됩니다. 오류 및 메시지 :
The resource identified by this request is only capable of generating responses
with characteristics not acceptable according to the request "accept" headers.
내 모델 객체 :
@XmlRootElement
public class Activity {
private Long id;
private String description;
private int duration;
private User user;
//getters & setters...
}
@XmlRootElement
public class User {
private String name;
private String id;
//getters&setters...
}
우리가 도울 것입니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
이 작업을 수행하기 위해 pom.xml에 몇 개의 추가 jar가 필요합니까? jaxb-api 또는 jax-impl을 추가하려고 시도했지만 도움이되지 않았습니다.
해결법
-
==============================
1.Jersey를 사용하지 않고 Spring Boot에서이 작업을하려면 다음과 같은 종속성을 추가해야합니다.
Jersey를 사용하지 않고 Spring Boot에서이 작업을하려면 다음과 같은 종속성을 추가해야합니다.
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>
출력은 약간 추한 일이지만 작동합니다.
<ArrayList xmlns=""> <item> <id/> <description>Swimming</description> <duration>55</duration> <user/> </item> <item> <id/> <description>Cycling</description> <duration>120</duration> <user/> </item> </ArrayList>
여기 좋은 튜토리얼입니다 : http://www.javacodegeeks.com/2015/04/jax-rs-2-x-vs-spring-mvc-returning-an-xml-representation-of-a-list-of-objects.html
-
==============================
2.우리는 아래와 같이 이것을 달성 할 수 있습니다 :
우리는 아래와 같이 이것을 달성 할 수 있습니다 :
암호
package com.subu; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import javax.xml.bind.annotation.*; @Entity @XmlRootElement(name = "person") @Table(name="person") public class Person implements Serializable{ private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; @XmlAttribute(name = "first-name") private String first_name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirst_name() { return first_name; } public void setFirst_name(String first_name) { this.first_name = first_name; } public String getLast_name() { return last_name; } public void setLast_name(String last_name) { this.last_name = last_name; } public String getDate_of_birth() { return date_of_birth; } public void setDate_of_birth(String date_of_birth) { this.date_of_birth = date_of_birth; } @XmlAttribute(name = "last-name") private String last_name; @XmlAttribute(name = "dob") private String date_of_birth; }
@RestController public class PersonController { @Autowired private PersonRepository personRepository; @RequestMapping(value = "/persons/{id}", method = RequestMethod.GET,produces={MediaType.APPLICATION_XML_VALUE},headers = "Accept=application/xml") public ResponseEntity<?> getPersonDetails(@PathVariable Long id, final HttpServletRequest request)throws Exception { Person personResponse=personRepository.findPersonById(id); return ResponseEntity.ok(personResponse); } }
package com.subu; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @Configuration @ComponentScan @EnableAutoConfiguration @EnableScheduling public class Application extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Application.class); } private static Class<Application> applicationClass = Application.class; }
from https://stackoverflow.com/questions/32654291/spring-boot-rest-with-xml-support by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] HTTP 상태 가져 오기 400 - 필요한 MultipartFile 매개 변수 'file'이 (가) 봄에 없습니다. (0) | 2019.05.07 |
---|---|
[SPRING] 자바 객체가 런타임에 인터페이스를 구현하도록 할 수 있습니까? (0) | 2019.05.07 |
[SPRING] Bean 클래스를 인스턴스화 할 수 없습니다 : 지정된 클래스는 인터페이스입니다. (0) | 2019.05.07 |
[SPRING] Google의 Gson을 사용하여 Json을 Java 객체로 변환 (0) | 2019.05.07 |
[SPRING] Javax 유효성 검사 @NotNull 주석 사용법 (0) | 2019.05.07 |