반응형
Spring oxm과 JAXB를 이용한 객체 ↔ XML 변환
1. porm.xml (Maven dependency 추가)
1) spring oxm
- 'spring xml' 검색
- 'Spring Object/XML Marshalling' 선택
- 4.3.4 버전
2) jaxb
- jaxb 검색
- Java Architecture For XML Binding » 2.2.12
2. dispatcherServlet
- xml 파일의 Namespace 탭에서 p와 oxm 체크 (STS 플러그인 설치해야 보임)
- (근데 회사 eclipse Luna 버전에서 Namespaces 탭이 안보이는 것 같은데? (STS는 설치되어있음))
- (STS 버전이 잘못된건가해서 Luna용 STS를 깔려고 했는데 안깔아짐)
- (그래서 Luna말고 다른 버전을 쓰니까 STS 깔리고 Namespaces 탭도 보인다)
<constructor-arg><bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller"p:classesToBeBound="domain.Users"/></constructor-arg>
3. @XmlRootElement
- xml element로 사용할 객체에 @XmlRootElement 어노테이션 등록
예)
컨트롤러
@Controller public class UsersXmlController { /** * 원래 String, ModelandView가 리턴타입인데 Users로 하려면 다음처럼 responsebody * 실행 시 URL 뒤에 /userlist.do 를 붙여줘서 실행하면 xml이 출력된다. */ @RequestMapping(value="/userlist.do", produces="application/xml") public @ResponseBody Users getUsersToXml() { /*----------------------------------------------------------------------------------------------------- * 서비스, 스토어 없이 여기서 생성하겠다. * --------------------------------------------------------------------------------------------------*/ List<User> list = new ArrayList<>(); Users users = new Users(); User u1 = new User(); u1.setNo(1); u1.setId("abc"); u1.setPw("123"); u1.setName("강대봉"); u1.setAddress("서울시"); User u2 = new User(); u2.setNo(1); u2.setId("adfgbc"); u2.setPw("1234"); u2.setName("홍구"); u2.setAddress("서울시"); list.add(u1); list.add(u2); users.setUsers(list); return users; } }
도메인A
- @XmlRootElement로 user객체를 xml의 <user>요소로 변환
/** * xml에서 <user>로 묶임 * */ @XmlRootElement(name="user") @XmlAccessorType(XmlAccessType.FIELD) @Component public class User { private int no; private String id; private String pw; private String name; private String address; (이하 생략..)
도메인B (도메인A의 List)
- @XmlRootElement로 users객체를 xml의 <users>요소로 변환
/** * xml에서 <users>로 묶임 * */ @XmlRootElement(name="users") @XmlAccessorType(XmlAccessType.FIELD) @Component public class Users { @XmlElement(name="user") private List<User> users; public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } }
디스패처 서블릿
- jaxb의 xml뷰어 클래스 등록
- Namespaces 탭에서 p, oxm에 체크 (STS 플러그인 설치해야 보임)
(...생략)
<mvc:annotation-driven></mvc:annotation-driven> <!-- 빈 등록 (어노테이션을 이용한 등록 - component-scan 방식) --> <context:component-scan base-package="controller"></context:component-scan> <context:component-scan base-package="domain"></context:component-scan> <!-- 빈 등록 (생성자 이용) : JAXB를 이용한 마샬링 --> <bean id="xmlViewer" class="org.springframework.web.servlet.view.xml.MarshallingView"> <!-- 아래 코드는 Namespaces 탭에서 p, oxm에 체크해야 함! --> <constructor-arg> <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller" p:classesToBeBound="domain.Users"/> </constructor-arg> </bean>
(...생략)
porm.xml
- spring-oxm
- jaxb-api
(...생략) <!-- https://mvnrepository.com/artifact/org.springframework/spring-oxm --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>4.3.4.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api --> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.2.12</version> </dependency> (...생략)
run on server로 실행
- URL 주목.. @RequestMapping에서 설정한 컨트롤러 메소드(xml로 변환될 객체를 리턴하는 메소드)로 접속
반응형
'개발_웹 > Java' 카테고리의 다른 글
eclipse에서 Gradle 프로젝트 rename 안되는 경우 (0) | 2019.01.07 |
---|---|
Java | 객체(Object) ↔ XML (simple 프레임워크를 이용한 xml 변환) (0) | 2017.11.01 |
Java | 객체(Object) ↔ XML (JAXB, Simple Framework) (0) | 2017.10.31 |
Java | split() - 문자열 나누기 (0) | 2017.09.04 |
Java | 태그가 적용되지 않고, 화면에 그대로 노출될 경우 (JSTL, escapeXml) (0) | 2017.09.03 |