私はSpringフレームワークには新しく、他の人が使用するためのAPIを作成しようとしました。HTTP POSTの通知
この私のコントローラクラスに
POSTメソッド
// -------------------Create a Report-------------------------------------------
@RequestMapping(value = "/report/", method = RequestMethod.POST)
public ResponseEntity<?> createReport(@RequestBody Report report, UriComponentsBuilder ucBuilder) {
logger.info("Creating Report : {}", report);
if (reportRepository.isReportExist(report)) {
logger.error("Unable to create. A report with name {} already exist", report.getCrisisID());
return new ResponseEntity(new CustomErrorType("Unable to create. A Report with crisisID " +
report.getCrisisID() + " already exist."),HttpStatus.CONFLICT);
}
reportRepository.saveReport(report);
HttpHeaders headers = new HttpHeaders();
headers.setLocation(ucBuilder.path("/api/report/{crisisID}").buildAndExpand(report.getCrisisID()).toUri());
return new ResponseEntity<String>(headers, HttpStatus.CREATED);
}
を方法以下
// -------------------Retrieve All Reports---------------------------------------------
@RequestMapping(value = "/report/", method = RequestMethod.GET)
public ResponseEntity<List<Report>> listAllReports() {
List<Report> reports = reportRepository.findAllReports();
if (reports.isEmpty()) {
return new ResponseEntity(HttpStatus.NO_CONTENT);
// You many decide to return HttpStatus.NOT_FOUND
}
return new ResponseEntity<List<Report>>(reports, HttpStatus.OK);
}
レポートオブジェクトを作成するために、他のコード例でGETされそれを私のAPIに送ってください。
- 誰かがレポートを作成し、POST URLを経由して私にそれを送信すると、私のPOSTメソッドは、します:次が可能かどうか、このような状況にアプローチする方法があるかどうか、私は疑問に思って
// POST private static void createReport() { System.out.println("Testing create Report API----------"); RestTemplate restTemplate = new RestTemplate(); Report report = new Report(20, "General", 4, "AA1",10000,"crisis details", "1 hour", "COA1", "COA1"); URI uri = restTemplate.postForLocation(REST_SERVICE_URI + "/report/", report, Report.class);System.out.println("Location : "+uri.toASCIIString()); }
新しいレポートエントリが作成されたことを自動的に検出できるようにして、HTML/JSPページ(ポップアップウィンドウなど)に通知を送信します。
更新
RestApiController.java
@RestController
@RequestMapping("/api")
public class RestApiController {
public static final Logger logger = LoggerFactory.getLogger(RestApiController.class);
@Autowired
ReportRepository reportRepository; //Service which will do all data retrieval/manipulation work
// -------------------Create a Report-------------------------------------------
@RequestMapping(value = "/report/", method = RequestMethod.POST)
@SendTo("/channel/publicreport")
public ResponseEntity<?> createReport(@RequestBody Report report, UriComponentsBuilder ucBuilder) {
logger.info("Creating Report : {}", report);
if (reportRepository.isReportExist(report)) {
logger.error("Unable to create. A report with name {} already exist", report.getCrisisID());
return new ResponseEntity(new CustomErrorType("Unable to create. A Report with crisisID " +
report.getCrisisID() + " already exist."),HttpStatus.CONFLICT);
}
reportRepository.saveReport(report);
HttpHeaders headers = new HttpHeaders();
headers.setLocation(ucBuilder.path("/api/report/{crisisID}").buildAndExpand(report.getCrisisID()).toUri());
return new ResponseEntity<String>(headers, HttpStatus.CREATED);
}
}
WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chatservice");
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/channel");
}
}
main.js
'use strict';
var stompClient = null;
var username = null;
function connectReport(event) {
username = "myname";
if(username) {
//var socket = new SockJS('/ws');
//stompClient = Stomp.over(socket);
stompClient = Stomp.client('ws://localhost:8080/chatservice');
stompClient.connect({}, onConnectedReport, onError);
}
event.preventDefault();
}
function onConnectedReport() {
// Subscribe to the Public Channel
stompClient.subscribe('/channel/publicreport',onReportMessageReceived);
}
function onError(error) {
connectingElement.textContent = 'Could not connect to WebSocket server. Please refresh this page to try again!';
connectingElement.style.color = 'red';
}
function onReportMessageReceived(payload) {
//Code for pop up window
}
window.addEventListener("load", connectReport, true)
あなたはアプローチを選択する必要があります。それぞれ長所/短所:Option1。 HTMLは結果をプールし続けます。オプション2。ウェブソケットを使用してください。 – Rafa
websocketが使用されている場合、通知はリアルタイムで行われますが、連続プーリング儀式の場合はそうではありませんか? –
が正しい。また、プーリングする方が実装が簡単ですが、サーバー側に余分な負荷がかかる可能性があります – Rafa