Каков наилучший способ вернуть различные типы ResponseEntity в Spring MVC или Spring-Boot

Вы можете либо использовать логический флаг, указывающий, когда он «безопасен» для обработки события, либо вы можете использовать альтернативный синтаксис для добавления обработчика событий ПОСЛЕ загрузки формы, и вся инициализация была выполнена.

Для этого вы используете синтаксис 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
29
задан Saveendra Ekanayake 26 January 2019 в 08:17
поделиться

8 ответов

Я рекомендую использовать Spring @ControllerAdvice для обработки ошибок валидации. Прочитайте это руководство для хорошего введения, начиная с раздела «Обработка ошибок Spring Boot». Для углубленного обсуждения есть статья в блоге Spring.io, которая была обновлена ​​в апреле 2018 года.

Краткое описание того, как это работает:

  • Ваш метод контроллера должен возвращать только ResponseEntity<Success>. Он не будет нести ответственность за возврат ошибок или ответов об исключениях.
  • Вы реализуете класс, который обрабатывает исключения для всех контроллеров. Этот класс будет помечен @ControllerAdvice
  • Этот класс совета контроллера будет содержать методы, помеченные @ExceptionHandler
  • Каждый метод обработчика исключений будет настроен для обработки одного или нескольких типов исключений. В этих методах вы указываете тип ответа для ошибок
  • Для вашего примера вы объявили бы (в классе рекомендаций контроллера) метод обработчика исключений для ошибки проверки. Тип возвращаемого значения будет ResponseEntity<Error>

При таком подходе вам нужно будет реализовать обработку исключений вашего контроллера только в одном месте для всех конечных точек в вашем API. Это также облегчает для вашего API единообразную структуру ответов на все конечные точки. Это упрощает обработку исключений для ваших клиентов.

42
ответ дан Mark Norman 26 January 2019 в 08:17
поделиться

Я не уверен, но, я думаю, вы можете использовать @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);
}

. : http://www.concretepage.com/spring-4/spring-4-mvc-jsonp-example-with-rest-responsebody-responseentity

5
ответ дан Michael Lihs 26 January 2019 в 08:17
поделиться

Вы можете вернуть универсальный подстановочный знак <?> для возврата 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 ответ - правильный подход

33
ответ дан Saravana 26 January 2019 в 08:17
поделиться

Его можно вернуть 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);
    }
}
3
ответ дан Saveendra Ekanayake 26 January 2019 в 08:17
поделиться

Вы также можете реализовать подобное, чтобы возвращать Успех и Ошибка в одном и том же методе сопоставления запросов, используя Класс объекта (Родительский класс каждого класса в 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   
}
1
ответ дан KARTHIKEYAN.A 26 January 2019 в 08:17
поделиться

Вот способ, которым я бы сделал это:

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);

}
2
ответ дан Maria Ines Parnisari 26 January 2019 в 08:17
поделиться

Вы можете использовать карту со своим объектом или строкой, как показано ниже:

@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);
    }

}
3
ответ дан Ridha10 26 January 2019 в 08:17
поделиться

Раньше я использовал такой класс. 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;
}

}

Надеюсь, это поможет.

0
ответ дан shazinltc 26 January 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: