java - 如何以 JSON 格式返回信息
问题描述
我写了一个迷你项目。它返回域信息。域信息和主机信息 + 状态信息。我在终端中使用 cURL util。所有域信息都存储在我的数据库 MySQL 中所以他通过终端返回给我这样
C:\Users\Sky>curl -H "Content-Type: application/json" -d "{\"domain\":\"amazon.kz\"}" localhost:8080/api/whois
Domain Name............: amazon.kz
Organization Using Domain Name
Name...................: Amazon.com, Inc.
Organization Name......: Amazon.com, Inc.
Street Address.........: Legal Dept. P.O. Box 81226
City...................: Seattle WA
State..................:
Postal Code............: 98108
Country................: US
Administrative Contact/Agent
Nick Handle............: HOSTERKZ-76523
Phone Number...........: +1.2062664064
Fax....................: +1.2062667010
Email Address..........: admin@internationaladmin.com
Nameserver in listed order
Server.................: 3783652
Ip address.............: 185.98.6.6
Server.................: 3783652
Ip address.............: 104.131.219.250
Server.................: 3783652
Ip address.............: 92.38.225.176
Domain created: 1998-01-02 12:31:33
Last modified: 2013-03-16 10:52:31
Domain status: KAZ
Registrar created: HOSTER.KZ
Current Registrar: clientDeleteProhibited
Domain created: 1998-01-02 12:31:33
Last modified: 2013-03-16 10:52:31
Domain status: KAZ
Registrar created: HOSTER.KZ
Current Registrar: clientTransferProhibited
但是我需要以 JSON 格式返回,你可以帮忙这里是我的 spring boot 项目中的代码。
@RestController
@RequestMapping("api/whois")
public class DomainWhoIsController {
@Autowired
DomainRepository domainRepository;
@Autowired
ContactsRepository contactsRepository;
@Autowired
HostRepository hostRepository;
@Autowired
StatusRepository statusRepository;
@PostMapping
public String whoIs(@RequestBody Request request) {
System.out.println(request);
DomainInfo domainInfo = domainRepository.findDomainInfo(request.getDomain());
ContactInfo contactInfo = contactsRepository.findContactInfo(request.getDomain());
List<HostInfo> hostInfo = hostRepository.findHostInfo(request.getDomain());
List<StatusInfo> statusInfo = statusRepository.findStatusInfo(request.getDomain());
return report(domainInfo, contactInfo, hostInfo, statusInfo);
}
private String report(DomainInfo domainInfo, ContactInfo contactInfo, List<HostInfo> hostInfo, List<StatusInfo> statusInfo) {
StringBuffer sb = new StringBuffer();
sb
.append("Domain Name............: ").append(domainInfo.getDomainName()).append(System.lineSeparator())
.append(System.lineSeparator())
.append("Organization Using Domain Name").append(System.lineSeparator())
.append("Name...................: ").append(domainInfo.getName()).append(System.lineSeparator())
.append("Organization Name......: ").append(domainInfo.getOrganizationName()).append(System.lineSeparator())
.append("Street Address.........: ").append(domainInfo.getStreetAddress()).append(System.lineSeparator())
.append("City...................: ").append(domainInfo.getCity()).append(System.lineSeparator())
.append("State..................: ").append(domainInfo.getState()).append(System.lineSeparator())
.append("Postal Code............: ").append(domainInfo.getPostalCode()).append(System.lineSeparator())
.append("Country................: ").append(domainInfo.getCountry()).append(System.lineSeparator())
.append(System.lineSeparator())
.append("Administrative Contact/Agent").append(System.lineSeparator())
.append("Nick Handle............: ").append(contactInfo.getHandle()).append(System.lineSeparator())
.append("Phone Number...........: ").append(contactInfo.getVoice()).append(System.lineSeparator())
.append("Fax....................: ").append(contactInfo.getFax()).append(System.lineSeparator())
.append("Email Address..........: ").append(contactInfo.getEmail()).append(System.lineSeparator())
.append(System.lineSeparator())
.append("Nameserver in listed order").append(System.lineSeparator())
.append(System.lineSeparator());
hostInfo.forEach(hInfo -> sb
.append("Server.................: ").append(hInfo.getDomain()).append(System.lineSeparator())
.append("Ip address.............: ").append(hInfo.getIpaddr()).append(System.lineSeparator())
);
sb.append(System.lineSeparator());
statusInfo.forEach(sInfo -> sb
.append("Domain created: ").append(sInfo.getCreated()).append(System.lineSeparator())
.append("Last modified: ").append(sInfo.getUpdated()).append(System.lineSeparator())
.append("Domain status: ").append(sInfo.getStatus()).append(System.lineSeparator())
.append("Registrar created: ").append(sInfo.getRegistarcr()).append(System.lineSeparator())
.append("Current Registrar: ").append(sInfo.getRegistrar()).append(System.lineSeparator())
);
return sb.toString();
}
}
解决方案
如果您想要返回 DomainInfo,只需将 returnType 更改为 DomainInfo。
@PostMapping
public DomainInfo whoIs(@RequestBody Request request) {
// ...
DomainInfo domainInfo = domainRepository.findDomainInfo(request.getDomain());
// ...
return domainInfo;
}
或者您希望所有对象在一起,只需创建包含所有对象的新类并将该类用作 returnType :
WhoIs.class
public class WhoIs {
// All Args Constructor
private DomainInfo domainInfo;
private ContactInfo contactInfo;
private List<HostInfo> hostInfo;
private List<StatusInfo> statusInfo;
// getter & setter
}
DomainWhoIsController.class
@PostMapping
public WhoIs whoIs(@RequestBody Request request) {
System.out.println(request);
DomainInfo domainInfo = domainRepository.findDomainInfo(request.getDomain());
ContactInfo contactInfo = contactsRepository.findContactInfo(request.getDomain());
List<HostInfo> hostInfo = hostRepository.findHostInfo(request.getDomain());
List<StatusInfo> statusInfo = statusRepository.findStatusInfo(request.getDomain());
return new WhoIs(domainInfo, contactInfo, hostInfo, statusInfo);
}
推荐阅读
- ios - 在 Xcode10 中更新 J2ObjC 库
- ruby - 创建 gem 时在哪里配置 ActiveRecord?
- rust - 'let x = x' 在 Rust 中做了什么?
- excel - 使用 Laravel Excel Export(3.1 版)导出大量数据
- python - Django:查询集“丢失”一个值
- java - Jetty 9 嵌入式 SSL 需要 12 分钟才能启动
- angular - 使用与我的实际文化信息不同的小数分隔符
- linux - 在 linux 中每次启动时使用命令启动 vnc-server
- mysql - 具有hasMany关系的递归查询
- sql - 使用 OR 子句的 SQL 查询性能