Как вернуть объект класса Bean как JSON в Rest Controller в Spring MVC - PullRequest
0 голосов
/ 29 июня 2018

Здесь мой контроллер, как,

 @RequestMapping(value = "/restCallRequest", headers = 
 "Accept=application/json", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<Void> callRequest(@RequestBody CallRequestData  
 requestData, UriComponentsBuilder ucBuilder) {

    if (requestData.getIvrName().isEmpty()) {
        return new ResponseEntity<Void>(HttpStatus.CONFLICT);
    }
    System.err.println("IVER Name is "+requestData.getIvrName()+" lsit "+requestData.getContactList().get(0));

   HttpHeaders headers = new HttpHeaders();
   headers.setLocation(ucBuilder.path("/restCallRequest").buildAndExpand(requestData).toUri());
  return new ResponseEntity<Void>(headers, HttpStatus.CREATED); 
}

И мой класс бобов,

@Entity
public class CallRequestData {
private int id;   //Auto incremented
private String ivrName;
private List<String> contactList;
public CallRequestData(int id, String ivrName, List<String> contactList) {
    this.id = id;
    this.ivrName = ivrName;
    this.contactList = contactList;
}
//setters And Getters

Здесь мой почтальон отправляет JSON

{
    "ivr_name":"welcome",
    "contactList":[
           "9040210495",
           "958045830"
    ]
}

А также я хочу ответ как запрос, { "Ivr_name": "Добро пожаловать", "Список контактов":[ "9040210495", "958045830" ] } * +1010 *

Как я могу решить это. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Добавить зависимости Джексона

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.9.4</version>
  <scope>provided</scope>
</dependency>

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.4</version>
  <scope>provided</scope>
</dependency> 

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.4</version>
  <scope>provided</scope>
</dependency>

и добавьте

@RequestMapping(value="/endpoint",produces="application/json",method=RequestMethod.POST)

produces="application/json" к отображению запроса. \

Теперь, бин, определенный после того, как @ResponseBody будет возвращен клиенту как объект json. Нет необходимости анализировать его как json извне.

0 голосов
/ 29 июня 2018

Я не понимаю, почему вы делаете все это вариант. Это так просто.

Если ваш контроллер аннотирован @RestController, вам нужно просто вернуть объект следующим образом:

@RequestMapping..................................)
 public ResponseEntity<CallRequestData> callRequest(@RequestBody CallRequestData 
 requestData, UriComponentsBuilder ucBuilder) {

......... код здесь ......

  return new ResponseEntity<>(requestData, HttpStatus.CREATED); 

}

Установите тип возвращаемого значения для объекта ответа, а затем просто верните новый экземпляр ResponseEntity, как это.

Я предлагаю вам избежать множественного ВОЗВРАТА, присвоить переменную ResponseEntity и вернуть только один раз в конце метода

0 голосов
/ 29 июня 2018

добавить зависимость в pom.xml

<dependency>
    <groupId>net.sf.flexjson</groupId>
    <artifactId>flexjson</artifactId>
    <version>2.1</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.3</version>
</dependency>

Запишите один метод в контроллере.

public String toJson(User bean) { 
  return new JSONSerializer().transform(new DateTransformer("MM/dd/yyyy HH:mm:ss"),java.util.Date.class).serialize(bean);
    }

и передайте объект bean этому методу.

return new ResponseEntity<String>(toJson(bean),headers, HttpStatus.CREATED); 

изменить тип возвращаемого значения на строку в сигнатуре метода public ResponseEntity<String> callRequest

ПРИМЕЧАНИЕ. Для загрузки Spring вы можете использовать аннотацию @RestController, которая автоматически преобразует объекты в json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...