从 MvcUriComponentsBuilder.fromMethodName() 而不是 localhost 获取带有 IP 地址的 URL
Get URLs with IP address from MvcUriComponentsBuilder.fromMethodName() instead of localhost
我正在使用 MvcUriComponentsBuilder.fromMethodName() 获取 URL 列表并将它们 return 发送到前端。以下是示例输出,其中我以本地主机的形式获取域:
[
http://localhost:8081/files/1800_tiger.jpg/slideshow, http://localhost:8081/files/1800_trees.jpg/slideshow
]
我希望 MvcUriComponentsBuilder 代替 localhost return 我系统的 IP 地址。以下是我的代码实现:
@CrossOrigin
@RestController
public class ContentResource {
@RequestMapping("/getAllFiles")
public ResponseEntity<List<String>> getAllFiles(@RequestParam String panelName) {
List<String> fileNamesList = panelFileListMap.get(panelName);
if (fileNamesList != null) {
List<String> allFiles = fileNamesList.stream()
.map(fileName -> MvcUriComponentsBuilder
.fromMethodName(ContentResource.class, "getFile", fileName, panelName).build().toString())
.collect(Collectors.toList());
return ResponseEntity.ok().body(allFiles);
} else {
throw new RuntimeException("No images are uploaded in category = " + panelName);
}
}
@GetMapping("/files/{filename:.+}/{panelName}")
@ResponseBody
public ResponseEntity<Resource> getFile(@PathVariable("filename") String filename,
@PathVariable("panelName") String panelname) {
Resource file = storageService.loadFile(filename, panelname);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"")
.body(file);
}
}
自己找到了解决方案:将 getAllFiles 方法更改如下:
InetAddress ip = null;
@RequestMapping("/getAllFiles")
public ResponseEntity<List<String>> getAllFiles(@RequestParam String panelName) {
try {
ip = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<String> fileNamesList = panelFileListMap.get(panelName);
if (fileNamesList != null) {
List<String> allFiles = fileNamesList.stream()
.map(fileName -> MvcUriComponentsBuilder
.fromMethodName(ContentResource.class, "getFile", fileName, panelName)
.host(ip.getHostAddress()).build().toString())
.collect(Collectors.toList());
return ResponseEntity.ok().body(allFiles);
} else {
throw new RuntimeException("No images are uploaded in category = " + panelName);
}
}
我正在使用 MvcUriComponentsBuilder.fromMethodName() 获取 URL 列表并将它们 return 发送到前端。以下是示例输出,其中我以本地主机的形式获取域:
[ http://localhost:8081/files/1800_tiger.jpg/slideshow, http://localhost:8081/files/1800_trees.jpg/slideshow ]
我希望 MvcUriComponentsBuilder 代替 localhost return 我系统的 IP 地址。以下是我的代码实现:
@CrossOrigin
@RestController
public class ContentResource {
@RequestMapping("/getAllFiles")
public ResponseEntity<List<String>> getAllFiles(@RequestParam String panelName) {
List<String> fileNamesList = panelFileListMap.get(panelName);
if (fileNamesList != null) {
List<String> allFiles = fileNamesList.stream()
.map(fileName -> MvcUriComponentsBuilder
.fromMethodName(ContentResource.class, "getFile", fileName, panelName).build().toString())
.collect(Collectors.toList());
return ResponseEntity.ok().body(allFiles);
} else {
throw new RuntimeException("No images are uploaded in category = " + panelName);
}
}
@GetMapping("/files/{filename:.+}/{panelName}")
@ResponseBody
public ResponseEntity<Resource> getFile(@PathVariable("filename") String filename,
@PathVariable("panelName") String panelname) {
Resource file = storageService.loadFile(filename, panelname);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"")
.body(file);
}
}
自己找到了解决方案:将 getAllFiles 方法更改如下:
InetAddress ip = null;
@RequestMapping("/getAllFiles")
public ResponseEntity<List<String>> getAllFiles(@RequestParam String panelName) {
try {
ip = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List<String> fileNamesList = panelFileListMap.get(panelName);
if (fileNamesList != null) {
List<String> allFiles = fileNamesList.stream()
.map(fileName -> MvcUriComponentsBuilder
.fromMethodName(ContentResource.class, "getFile", fileName, panelName)
.host(ip.getHostAddress()).build().toString())
.collect(Collectors.toList());
return ResponseEntity.ok().body(allFiles);
} else {
throw new RuntimeException("No images are uploaded in category = " + panelName);
}
}