我是这种编码的新手,我必须从不同的web应用程序的Spring控制器发送一个String集合,即List。所以我的问题是
我应该如何返回由List组成的Response
控制器?以下代码是否正常?以下是我的控制器
我将返回的代码List<String>
。
@RequestMapping(value = "getMyBookingsXmlList", method = RequestMethod.GET)
public @ResponseBody List<String> getMyBookingsXmlList() {
return mbXmlImpl.getMyBookingsDetailsXmlList();
}
在客户端,我该如何检索List<String>
哪个是从上面的控制器方法发送的?下面是代码
我正在努力做但我不知道该怎么做。
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("URL");
HttpResponse httpResponse = httpclient.execute(httpGet);
InputStream is = httpResponse.getEntity().getContent();
StringBuffer buffer = new StringBuffer();
byte [] b = new byte [1024];
for (int n ; (n = is.read(b)) != -1 ;)
buffer.append(new String(b, 0, n));
在此之后,我不知道该怎么做......
答案 0 :(得分:1)
使用Java客户端使用Rest服务的最简单方法是使用Spring RestTemplate。我建议你将List<String>
包装在另一个班级中并从你的控制器返回:
public class BookingList {
private List<String> booking;
// getters and setters
}
有了这个,您的客户端代码将非常简单:
BookingList bookingList = restTemplate.getForObject("http://yoururl", BookingList.class, Collections.emptyMap() ) ;
如果您想继续将List<String>
作为返回类型,那么客户端代码将如下所示:
ResponseEntity<List<String>> bookingListEntity = restTemplate.exchange("http://yoururl", HttpMethod.GET, null, new ParameterizedTypeReference<List<String>>() {}, Collections.emptyMap() ) ;
if (bookingListEntity.getStatusCode() == HttpStatus.OK) {
List<String> bookingList = bookingListEntity.getBody();
}
答案 1 :(得分:0)
如果您使用的是jstl
,则可以通过for-each
进行迭代
<c:forEach items="${Name_of_RequestAttribute}" var="ite">
<option value="${ite.Name_of_RequestAttribute}">${ite.Name_of_RequestAttribute}</option>
</c:forEach>
希望这会有所帮助!!
答案 2 :(得分:0)
我认为更好的方法是在您的应用程序中提供一个提供BookingXml的RESTFul Web服务。
如果您计划将现有控制器代码公开为Rest Webservice,可以按照此example中的说明使用RestTemplate进行Web服务调用。
您可以参考的其他资源: http://java.dzone.com/articles/how-use-spring-resttemplate-0 http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch18s03.html
具体来说,在您的情况下,您可以使用此代码示例:
控制器:
@Controller
@RequestMapping("/help")
public class HelpController {
@SuppressWarnings("unused")
private static final Logger logger = LoggerFactory.getLogger(HelpController.class);
@RequestMapping("/method")
public @ResponseBody String[] greeting() {
return new String[] { "Hello", "world" };
}
}
客户代码:
public class Client {
public static void main(final String[] args) {
final RestTemplate restTemplate = new RestTemplate();
try {
final String[] data = restTemplate.getForObject("http://localhost:8080/appname/help/method",
String[].class);
System.out.println(Arrays.toString(data));
}
catch (final Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果需要身份验证,则在使用RestTemplate时有两种方法可以传递用户凭据:
使用此示例创建RestTemplate对象:
HttpClient client = new HttpClient();
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("your_user","your_password");
client.getState().setCredentials(new AuthScope("thehost", 9090, AuthScope.ANY_REALM), credentials);
CommonsClientHttpRequestFactory commons = new CommonsClientHttpRequestFactory(client);
RestTemplate template = new RestTemplate(commons);
或者使用本回答中提到的Spring配置可以完成同样的操作: https://stackoverflow.com/a/9067922/1898397
答案 3 :(得分:0)
这个解决方案怎么样?
...
ResponseEntity<MyObject[]> response =
restTemplate.getForEntity(uribuilder.build().encode().toUri(),
MyObject[].class);
return Arrays.asList(response.getBody());
MyObject可以是任何东西,甚至是String。