2016-11-22 2 views
0

Я пытаюсь опубликовать объект, который включает в себя идентификатор (int) и массив, но я получаю ответ с ошибкой HTTP 400 с сервера. Это то, что я до сих пор ...

Java Bean Объект запроса:

public class GuardarVentaRequest { 

private Integer idCliente; 
private List<Venta> venta; ... (Getters and Setters code) 

Java объекта:

public class Venta { 

private Integer id; 
private String nombre; 
private Integer precio; 
private Integer cantidad; 
private Integer total; ... (Getters and Setters code) 

Java Контроллер:

@RequestMapping(value = "/guardarVenta", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody void venta(@RequestBody GuardarVentaRequest factura){ 
    System.out.println(factura); 
} 

AngularJS Услуги:

function guardarVenta(array){          
    let factura = { 
     idCliente : parseInt($('#cliente').val()), 
     venta : array, 
    }; 
    console.log(factura); 
    $http({ 
     method: 'POST', 
     url: '/blue/guardarVenta', 
     contentType: 'application/json', 
     data: factura 
    }).then(
    function successCallback(response){ 
     console.log(response.statusText); 
    }, 
    function errorCallback(response){ 
     console.log(response.statusText); 
    } 
    ); 
} 

Массив:

$scope.productos = new Array(); 
let productoInfo = { 
     id: $scope.producto.id, 
     nombre: $scope.producto.nombre, 
     precio: $scope.producto.precio, 
     cantidad: $scope.cantidadProducto, 
     total: $scope.producto.precio * $scope.cantidadProducto 
    } 
    $scope.productos.push(productoInfo); 

Выходные:

ADVERTENCIA: Failed to read HTTP message: 
org.springframework.http.converter.HttpMessageNotReadableException: Could 
not read document: Can not construct instance of com.blue.beans.Venta: no 
suitable constructor found, can not deserialize from Object value (missing 
default constructor or creator, or perhaps need to add/enable type 
information?) 
at [Source: [email protected]; line: 1, column: 28] 
(through reference chain: com.blue.beans.GuardarVentaRequest["venta"]- 
>java.util.ArrayList[0]); nested exception is 
com.fasterxml.jackson.databind.JsonMappingException: Can not construct 
instance of com.blue.beans.Venta: no suitable constructor found, can not 
deserialize from Object value (missing default constructor or creator, or 
perhaps need to add/enable type information?) 
at [Source: [email protected]; line: 1, column: 28] 
(through reference chain: com.blue.beans.GuardarVentaRequest["venta"]- 
>java.util.ArrayList[0]) 

Chrome's Network Tab Output

Любые идеи?

+0

На вкладке сети вашего браузера (щелкните правой кнопкой мыши> проверьте> сеть) вы должны получить дополнительную информацию о том, что пошло не так с вашим запросом. – lucasnadalutti

+0

Вы проверили свою службу с помощью PostMan? – hurricane

+0

Я собираюсь использовать его, но видите ли вы что-нибудь странное в коде? –

ответ

0

Попробуйте эти 3 вещи.

  1. Добавить конструктор по умолчанию в GuardarVentaRequest и Venta.

    GuardarVentaRequest() {} & Venta() {}

  2. Проверить, если HTTPMessageConverter был добавлен в весеннем конфигурации. Например: MappingJackson2MessageConverter (Проверьте совместимость с версией весны).

  3. Попробуйте сериализации полезный груз запрос с использованием angular.toJson

Надежда, что помогает!

+0

Да! Пользователь teppic просто сказал мне то же самое ... Это было решение, спасибо вам обоим! –

+0

Отлично! Кроме того, FYI, иногда угловой, как правило, добавляет ключ «$$ hashset», если массив ограничен областью и обновляется. Таким образом, его хорошая практика использовать angular.toJson для сериализации объекта запроса. – Nilsaw