0

У меня есть контроллер Spring 3, который возвращает объект JSON. Я использую аннотацию @ResponseBody и барабан jackson-mapper-asl, с помощью которого Spring автоматически обрабатывает преобразование JSON. 3 оператора возврата возвращают другой формат JSON. Может ли это быть обработано путем модификации возвращаемого типа метода getPersonDetails с Object или есть лучший способ.Spring @ResponseBody JSON

@RequestMapping(value="/test", method=RequestMethod.GET) 
public @ResponseBody List<Person> getPersonDetails() { 


    List<Person> listPerson = null; 
    try { 
     // Call to service and get the list of Person 
     listPerson = getPersonList(); 
     if(CollectionUtils.isNotEmpty(listPerson)) { 
      // Return JSON object 
      //{"Name":"XYZ", "Age":25} 
     } else { 
      // Return JSON object 
      //{"InformationMessage":"No data found."} 
     } 
    } catch(final Exception e) { 
     // Return JSON object 
     // {"ExceptionMessage":"Exception in controller."} 
    } 
} 

ответ

1

Вы могли бы что-то вроде этого

@RequestMapping(value="/test", method=RequestMethod.GET) 
public @ResponseBody ResponseEntity<List<Person>> getPersonDetails() { 
try{ 
if(dataAvailable) // if success 
{ 

return new ResponseEntity<List<Person>>(yourlist, responseHeaders, HttpStatus.OK); 
} 
else{ 
return new ResponseEntity<List<Person>>(HttpStatus.NOT_FOUND); 
} 

}catch(Exception e){ 
// your custom exception here 
throw new PersonNotFoundException(); 
} 

} 

Примечание: Набрали здесь не в IDE, любые синтаксические ошибки, не стесняйтесь редактировать.

1

Я хотел бы использовать ResponseEntity<?>

@RequestMapping(value="/test", method=RequestMethod.GET) 
public @ResponseBody ResponseEntity<List<Person>> getPersonDetails() { 


    List<Person> listPerson = null; 
    try { 
     // Call to service and get the list of Person 
     listPerson = getPersonList(); 
     if(CollectionUtils.isNotEmpty(listPerson)) { 
      return new ResponseEntity<>(listPerson, HttpStatus.OK); 
     } else { 
      return new ResponseEntity(HttpStatus.NOT_FOUND); 
     } 
    } catch(final Exception e) { 
     return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); 
    } 
} 
0

Кроме того: нет необходимости указывать через «объект сообщения», что-то не так. Для этого нужны HTTP-Status-Codes.

Я хотел бы пойти на нагнетание HttpServletResponse и использовать setStatus(), чтобы указать на ошибки, что указывает на 404 или 500. Кроме того, вы могли бы сообщение для тела с getWriter().write("{\"ExceptionMessage\":\"Exception in controller.\"}")

@RequestMapping(value="/test", method=RequestMethod.GET) 
public @ResponseBody List<Person> getPersonDetails(HttpServletResponse response) { 
    List<Person> listPerson = null; 
    try { 
     listPerson = getPersonList(); 
     if(!CollectionUtils.isEmpty(listPerson)) { 
      response.setStatus(HttpServletResponse.SC_NOT_FOUND); 
      response.getWriter().write("Whatever you want"); 
     } 
    } catch(final Exception e) { 
     response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
     response.getWriter().write("Whatever you want"); 
    } 
    return listPerson; 
} 
0

Брось конкретные исключениями из метода контроллера. Например, в вашем случае пользовательский список PersonNotFoundException, если он пуст, и ServiceException для неизвестных ошибок. И обрабатывайте эти исключения с помощью @ExceptionHandlers с возвращаемым типом ResponseEntity.

Метод контроллера должен иметь тип возврата только в виде списка.

Это поможет вам иметь аккуратную документацию.

Попробуйте найти, как использовать ExceptionHandlers весной.

Надеюсь, это ответит на ваш вопрос.

0

вы можете создать класс JResponse и сохранить свои данные.

public class JSonResponse{ 
    private Object result; 
    private String statu; 

    // 
} 


@RequestMapping(value="/test", method=RequestMethod.GET) 
public @ResponseBody JSonResponse getPersonDetails() { 
    JSonResponseres = new JSonResponse(); 
    List<Person> listPerson = null; 
    try { 
    // Call to service and get the list of Person 
    listPerson = getPersonList(); 
    if(CollectionUtils.isNotEmpty(listPerson)) { 
     res.setResult(listPerson); 
     res.status("SUCCESS"); 
    } else { 
     res.setResult("Not Found Data"); 
     res.status("FAIL"); 
    } 
    } catch(final Exception e) { 
    // Return JSON object 
    // {"ExceptionMessage":"Exception in controller."} 
} 

    return res; 
} 
Смежные вопросы