2016-11-22 15 views
0

私はid(int)と配列を含むオブジェクトを投稿しようとしていますが、サーバー側からhttp 400 Bad Requestレスポンスを取得します。これは...私がこれまで持っているものである

要求のための

の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

ブラウザのネットワークタブ(右クリック> inspect> network)で、あなたのリクエストに何が間違っていたかについて詳しく知る必要があります。 – lucasnadalutti

+0

PostManでサービスをテストしましたか? – hurricane

+0

私はそれを使用しようとしていますが、コードに何か変わったものがありますか? –

答えて

0

これらの3つのことを試してください。

  1. GuardarVentaRequestとVentaにデフォルトのコンストラクタを追加します。

    GuardarVentaRequest(){} & ベンタ(){}

  2. チェックHTTPMessageConverterはあなたのばねの設定に追加されている場合。例:MappingJackson2MessageConverter(春バージョンとの互換性を確認してください)

  3. は役立ちますangular.toJson

希望を使用して要求ペイロードをシリアライズお試しください!

+0

はい!ユーザーのテピックはちょうど私に同じことを言った...それは解決策でした、あなたのおかげです! –

+0

素晴らしい!また、FYIでは、配列がスコープで囲まれて更新された場合、角度によってハッシュセットキーが追加されることがあります。そのため、angle.toJsonを使用してリクエストオブジェクトをシリアライズすることをお勧めします。 – Nilsaw