Статус 400 и Ошибка десериализации списка объектов.Конструктор по умолчанию не найден - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть этот репозиторий Spring:

public interface MessageRepository extends CrudRepository<MessageObject, String>{

public List<MessageObject> findByEmisorOrDestinatario(String emisor, String destinatario);
}

Мой DAO:

@Entity
@Table(name = "messages")
public class MessageObject implements Serializable{

private static final long serialVersionUID = 1L;
@Id
private String id;
private String emisor;
private String destinatario;
private String mensaje;
private String tipo;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate fecha;
private String id_housing;

public MessageObject() {

  }

Теперь в моем контроллере я хочу получить запрос Get и выполнить поиск в моей БД так:

@RestController
public class Controller {

@Autowired
private MessageRepository daoMsg;

@RequestMapping(value = "/Mensajes", method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
public List<MessageObject> enviados (@RequestParam("mail") String mail) {
    return daoMsg.findByEmisorOrDestinatario(mail, mail);   

}   

}

Теперь я могу позвонить в службу с моего клиента, поэтому:

ClientConfig config = new ClientConfig();
    Client client = ClientBuilder.newClient();

    WebTarget webResource = client.target("http://localhost:8082").path("/Mensajes").queryParam(mail);
    Invocation.Builder invocationBuilder = webResource.request(MediaType.APPLICATION_JSON);
    Response respuesta = invocationBuilder.get();
    int status = respuesta.getStatus();
    System.out.println(status);
    MessageObject[] listMessages = respuesta.readEntity(MessageObject[].class);

Проблемы: Я получаю 400код состояния.Также ошибка десериализации entityRead.Выполнение запроса с помощью Postman не возвращает ошибок и возвращает список объектов в формате JSON.

StackTrace:

javax.ws.rs.ProcessingException: Error deserializing object from entity 
stream. Caused by: javax.json.bind.JsonbException: Can't create instance of 
a class: class [LMessages.MessageObject; 
No default constructor found. Caused by: java.lang.NoSuchMethodException: 
[LMessages.MessageObject;.<init>()

Вопрос: как узнать, где происходит сбой моего кода?я использую сервисный вызов хорошо?

Вещи, которые я пытался : изменение Mediatype на GenericType

EDIT Я пытался удалить / из пути, все еще получая статус 400

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

решаемая.Проблема была в том, что я использовал .queryparam без структуры ключ-значение.Таким образом, изменение .queryparam(mail) на .queryparam("mail", mail) решило это.

0 голосов
/ 07 декабря 2018

Попробуйте проверить это:

   @RestController
    public class Controller {

    @Autowired
    private MessageRepository daoMsg;

    @RequestMapping(value = "/Mensajes", method = RequestMethod.GET, produces=MediaType.APPLICATION_JSON_VALUE)
    @ReponseBody
    public ResponseEntity<List<MessageObject>> enviados (@RequestParam("mail") String mail) {
        return new ResponseEntity<>(daoMsg.findByEmisorOrDestinatario(mail, mail), HttpStatus.OK);  

    } 
...