Вы можете либо использовать логический флаг, указывающий, когда он «безопасен» для обработки события, либо вы можете использовать альтернативный синтаксис для добавления обработчика событий ПОСЛЕ загрузки формы, и вся инициализация была выполнена.
Для этого вы используете синтаксис AddHandler
:
AddHandler combobox.SelectedIndexChanged, AddressOf combobox_SelectedIndexChanged
Надеемся, что это поможет
EDIT:
Используя синтаксис AddHandler
вы должны убедиться, что НЕ добавить предложение Handles
к объявлению обработчика события:
Private Sub combobox_SelectedIndexChanged(sender As Object, e As EventArgs)
'you event handler code
End Sub
Затем, как правило, в конце переопределения OnLoad
формы вы будете использовать AddHandler
:
Public Class Form1
Protected Overrides Sub OnLoad(e As EventArgs)
MyBase.OnLoad(e)
' Initialization code/whatever
AddHandler ComboBox1.SelectedIndexChanged, AddressOf combobox_SelectedIndexChanged
End Sub
Private Sub combobox_SelectedIndexChanged(sender As Object, e As EventArgs)
'Your event handler code
End Sub
End Class
Я рекомендую использовать Spring @ControllerAdvice
для обработки ошибок валидации. Прочитайте это руководство для хорошего введения, начиная с раздела «Обработка ошибок Spring Boot». Для углубленного обсуждения есть статья в блоге Spring.io, которая была обновлена в апреле 2018 года.
Краткое описание того, как это работает:
ResponseEntity<Success>
. Он не будет нести ответственность за возврат ошибок или ответов об исключениях. @ControllerAdvice
@ExceptionHandler
ResponseEntity<Error>
При таком подходе вам нужно будет реализовать обработку исключений вашего контроллера только в одном месте для всех конечных точек в вашем API. Это также облегчает для вашего API единообразную структуру ответов на все конечные точки. Это упрощает обработку исключений для ваших клиентов.
Я не уверен, но, я думаю, вы можете использовать @ResponseEntity
и @ResponseBody
и отправить 2 разных: Успех, а второй - сообщение об ошибке, например:
@RequestMapping(value ="/book2", produces =MediaType.APPLICATION_JSON_VALUE )
@ResponseBody
Book bookInfo2() {
Book book = new Book();
book.setBookName("Ramcharitmanas");
book.setWriter("TulasiDas");
return book;
}
@RequestMapping(value ="/book3", produces =MediaType.APPLICATION_JSON_VALUE )
public ResponseEntity<Book> bookInfo3() {
Book book = new Book();
book.setBookName("Ramayan");
book.setWriter("Valmiki");
return ResponseEntity.accepted().body(book);
}
Вы можете вернуть универсальный подстановочный знак <?>
для возврата Success
и Error
для одного и того же метода отображения запросов
public ResponseEntity<?> method() {
boolean b = // some logic
if (b)
return new ResponseEntity<Success>(HttpStatus.OK);
else
return new ResponseEntity<Error>(HttpStatus.CONFLICT); //appropriate error code
}
@Mark Norman ответ - правильный подход
Его можно вернуть ResponseEntity
без использования дженериков, например,
public ResponseEntity method() {
boolean isValid = // some logic
if (isValid){
return new ResponseEntity(new Success(), HttpStatus.OK);
}
else{
return new ResponseEntity(new Error(), HttpStatus.BAD_REQUEST);
}
}
Вы также можете реализовать подобное, чтобы возвращать Успех и Ошибка в одном и том же методе сопоставления запросов, используя Класс объекта (Родительский класс каждого класса в Java): -
public ResponseEntity< Object> method() {
boolean b = // logic here
if (b)
return new ResponseEntity< Object>(HttpStatus.OK);
else
return new ResponseEntity< Object>(HttpStatus.CONFLICT); //appropriate error code
}
Вот способ, которым я бы сделал это:
public ResponseEntity < ? extends BaseResponse > message(@PathVariable String player) { //REST Endpoint.
try {
Integer.parseInt(player);
return new ResponseEntity < ErrorResponse > (new ErrorResponse("111", "player is not found"), HttpStatus.BAD_REQUEST);
} catch (Exception e) {
}
Message msg = new Message(player, "Hello " + player);
return new ResponseEntity < Message > (msg, HttpStatus.OK);
}
@RequestMapping(value = "/getAll/{player}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity < List < ? extends BaseResponse >> messageAll(@PathVariable String player) { //REST Endpoint.
try {
Integer.parseInt(player);
List < ErrorResponse > errs = new ArrayList < ErrorResponse > ();
errs.add(new ErrorResponse("111", "player is not found"));
return new ResponseEntity < List < ? extends BaseResponse >> (errs, HttpStatus.BAD_REQUEST);
} catch (Exception e) {
}
Message msg = new Message(player, "Hello " + player);
List < Message > msgList = new ArrayList < Message > ();
msgList.add(msg);
return new ResponseEntity < List < ? extends BaseResponse >> (msgList, HttpStatus.OK);
}
Вы можете использовать карту со своим объектом или строкой, как показано ниже:
@RequestMapping(value = "/path",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<Map<String,String>> getData(){
Map<String,String> response = new HashMap<String, String>();
boolean isValid = // some logic
if (isValid){
response.put("ok", "success saving data");
return ResponseEntity.accepted().body(response);
}
else{
response.put("error", "an error expected on processing file");
return ResponseEntity.badRequest().body(response);
}
}
Раньше я использовал такой класс. statusCode устанавливается, когда возникает ошибка с сообщением об ошибке, установленным в сообщении . Данные хранятся либо на карте, либо в списке по мере необходимости.
/**
*
*/
package com.test.presentation.response;
import java.util.Collection;
import java.util.Map;
/**
* A simple POJO to send JSON response to ajax requests. This POJO enables us to
* send messages and error codes with the actual objects in the application.
*
*
*/
@SuppressWarnings("rawtypes")
public class GenericResponse {
/**
* An array that contains the actual objects
*/
private Collection rows;
/**
* An Map that contains the actual objects
*/
private Map mapData;
/**
* A String containing error code. Set to 1 if there is an error
*/
private int statusCode = 0;
/**
* A String containing error message.
*/
private String message;
/**
* An array that contains the actual objects
*
* @return the rows
*/
public Collection getRows() {
return rows;
}
/**
* An array that contains the actual objects
*
* @param rows
* the rows to set
*/
public void setRows(Collection rows) {
this.rows = rows;
}
/**
* An Map that contains the actual objects
*
* @return the mapData
*/
public Map getMapData() {
return mapData;
}
/**
* An Map that contains the actual objects
*
* @param mapData
* the mapData to set
*/
public void setMapData(Map mapData) {
this.mapData = mapData;
}
/**
* A String containing error code.
*
* @return the errorCode
*/
public int getStatusCode() {
return statusCode;
}
/**
* A String containing error code.
*
* @param errorCode
* the errorCode to set
*/
public void setStatusCode(int errorCode) {
this.statusCode = errorCode;
}
/**
* A String containing error message.
*
* @return the errorMessage
*/
public String getMessage() {
return message;
}
/**
* A String containing error message.
*
* @param errorMessage
* the errorMessage to set
*/
public void setMessage(String errorMessage) {
this.message = errorMessage;
}
}
Надеюсь, это поможет.