diff --git a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/SimpleTeamDTO.java b/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/SimpleTeamDTO.java deleted file mode 100644 index a60cb106..00000000 --- a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/SimpleTeamDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.springside.examples.showcase.webservice.rest; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -public class SimpleTeamDTO { - - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public String toString() { - return ToStringBuilder.reflectionToString(this); - } -} diff --git a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserDTO.java b/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserDTO.java index 03d95d99..829f1d40 100644 --- a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserDTO.java +++ b/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserDTO.java @@ -11,7 +11,7 @@ public class UserDTO { private String loginName; private String name; private String email; - private SimpleTeamDTO team; + private Long teamId; public Long getId() { return id; @@ -45,12 +45,12 @@ public class UserDTO { email = value; } - public SimpleTeamDTO getTeam() { - return team; + public Long getTeamId() { + return teamId; } - public void setTeam(SimpleTeamDTO team) { - this.team = team; + public void setTeamId(Long teamId) { + this.teamId = teamId; } /** diff --git a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java b/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java index e6eb5a72..b100acf2 100644 --- a/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java +++ b/examples/showcase/src/main/java/org/springside/examples/showcase/webservice/rest/UserRestController.java @@ -19,16 +19,22 @@ public class UserRestController { @RequestMapping(value = "/{id}.xml", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE) @ResponseBody - public UserDTO getAs(@PathVariable("id") Long id) { + public UserDTO getAsXml(@PathVariable("id") Long id) { User user = accountService.getUser(id); - return BeanMapper.map(user, UserDTO.class); - + return bindDTO(user); } @RequestMapping(value = "/{id}.json", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody - public UserDTO listasJson(@PathVariable("id") Long id) { + public UserDTO getAsJson(@PathVariable("id") Long id) { User user = accountService.getUser(id); - return BeanMapper.map(user, UserDTO.class); + return bindDTO(user); + } + + private UserDTO bindDTO(User user) { + UserDTO dto = BeanMapper.map(user, UserDTO.class); + //补充Dozer不能自动绑定的属性 + dto.setTeamId(user.getTeam().getId()); + return dto; } } diff --git a/examples/showcase/src/main/resources/security/applicationContext-shiro.xml b/examples/showcase/src/main/resources/security/applicationContext-shiro.xml index daf26d9a..cd99e08b 100644 --- a/examples/showcase/src/main/resources/security/applicationContext-shiro.xml +++ b/examples/showcase/src/main/resources/security/applicationContext-shiro.xml @@ -26,7 +26,7 @@ /login = authc /logout = logout /account/** = user - /rest/users = authcBasic + /api/** = authcBasic diff --git a/examples/showcase/src/main/webapp/WEB-INF/views/story/webservice.jsp b/examples/showcase/src/main/webapp/WEB-INF/views/story/webservice.jsp index 6a9adfcf..c2914032 100644 --- a/examples/showcase/src/main/webapp/WEB-INF/views/story/webservice.jsp +++ b/examples/showcase/src/main/webapp/WEB-INF/views/story/webservice.jsp @@ -12,12 +12,19 @@ -

Web Service 演示

+

Web Service 演示

-

传统SOAP Web Service演示

- +

传统SOAP Web Service演示

+ + +

Restful Service高级演示

+ \ No newline at end of file diff --git a/examples/showcase/src/test/functional/org/springside/examples/showcase/functional/rest/UserRestFT.java b/examples/showcase/src/test/functional/org/springside/examples/showcase/functional/rest/UserRestFT.java index 8ecb05f0..8fa7ee69 100644 --- a/examples/showcase/src/test/functional/org/springside/examples/showcase/functional/rest/UserRestFT.java +++ b/examples/showcase/src/test/functional/org/springside/examples/showcase/functional/rest/UserRestFT.java @@ -4,9 +4,15 @@ import static org.junit.Assert.*; import org.junit.BeforeClass; import org.junit.Test; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import org.springside.examples.showcase.functional.BaseFunctionalTestCase; import org.springside.examples.showcase.webservice.rest.UserDTO; +import org.springside.modules.web.Servlets; public class UserRestFT extends BaseFunctionalTestCase { @@ -19,14 +25,46 @@ public class UserRestFT extends BaseFunctionalTestCase { resoureUrl = baseUrl + "/api/v1/user"; } + /** + * 演示restTemplate中如何设置Headers. + * 演示json与xml格式数据. + */ @Test public void getUser() { + //设置Http Basic参数 + HttpHeaders requestHeaders = new HttpHeaders(); + requestHeaders.set(com.google.common.net.HttpHeaders.AUTHORIZATION, Servlets.encodeHttpBasic("admin", "admin")); + HttpEntity requestEntity = new HttpEntity(requestHeaders); + //as xml - UserDTO user = restTemplate.getForObject(resoureUrl + "/{id}.xml", UserDTO.class, 1L); - assertEquals("admin", user.getLoginName()); + HttpEntity response = restTemplate.exchange(resoureUrl + "/{id}.xml", HttpMethod.GET, requestEntity, + UserDTO.class, 1L); + assertEquals("admin", response.getBody().getLoginName()); + assertEquals(new Long(1), response.getBody().getTeamId()); //as json - user = restTemplate.getForObject(resoureUrl + "/{id}.json", UserDTO.class, 1L); - assertEquals("admin", user.getLoginName()); + response = restTemplate.exchange(resoureUrl + "/{id}.json", HttpMethod.GET, requestEntity, UserDTO.class, 1L); + assertEquals("admin", response.getBody().getLoginName()); + assertEquals(new Long(1), response.getBody().getTeamId()); + } + + /** + * 演示restTemplate中如何设置Headers. + * 演示json与xml格式数据. + */ + @Test + public void authWithHttpBasic() { + //设置Http Basic参数 + HttpHeaders requestHeaders = new HttpHeaders(); + requestHeaders.set(com.google.common.net.HttpHeaders.AUTHORIZATION, + Servlets.encodeHttpBasic("admin", "wrongpassword")); + HttpEntity requestEntity = new HttpEntity(requestHeaders); + + try { + restTemplate.exchange(resoureUrl + "/{id}.xml", HttpMethod.GET, requestEntity, UserDTO.class, 1L); + fail("Get should fail with error username/password"); + } catch (HttpClientErrorException e) { + assertEquals(HttpStatus.UNAUTHORIZED, e.getStatusCode()); + } } }