I compared this example to my code and found not much different. Is
this correct?

However good news, i was able to solve the issue by using the own
resource class rather its instance. That is:
    AuditItemCreate.save(data);

I still have to understand why that made a difference.


2017-09-11 10:14 GMT-04:00, Stefano Cascarini <[email protected]>:
> I haven't used $resource but perhaps you want to do this ?
>
> https://stackoverflow.com/questions/16203646/send-request-body-on-resource
>
> On Mon, Sep 11, 2017 at 2:53 PM, L Eder <[email protected]> wrote:
>
>> Dan,
>> the  version is 1.5.3.
>>
>> I still have to learn about preparing the case for online access.
>>
>> But at least i have what was sent by the server, below.
>>
>> For your information, I tried to ommit the 'value' here, but again,
>> that error "Status: 422 "invalidReason": "No 'value' key"" appears.
>>
>>
>> Stefano,
>>
>> i tried $http.post([url], data) and curiously it worked.
>>
>> However i still need to base on $resource, because my app requires
>> offline access (brought by a third-party module, that is a $resource
>> drop-in replacement).
>>
>> Thanks for your help,
>> ----
>>
>> Server response:
>> "
>> {data: {…}, status: 422, config: {…}, statusText: "Unprocessable
>> Entity", headers: ƒ}
>> config:
>>     data:
>>     __proto__:Object
>> headers:
>>     Accept:"application/json, text/plain, */*"
>>     Authorization:"Basic ZG9tYWluYXBwLWFkbWluOnBhc3M="
>>     Content-Type:"application/json;charset=utf-8"
>> __proto__:Object
>> method:"POST"
>> paramSerializer:ƒ ngParamSerializer(params)
>>     arguments:(...)
>>     caller:(...)
>>     length:1
>>     name:"ngParamSerializer"
>> prototype:{constructor: ƒ}
>> __proto__:ƒ ()
>> [[FunctionLocation]]:ionic.bundle.js:23581
>> [[Scopes]]:Scopes[2]
>> params:
>>     asset:
>>         value:
>>         href:"http://localhost:8080/restful/objects/
>> businessentities.Asset/52"
>>         __proto__:Object
>>     __proto__:Object
>>     audit:
>>         value:
>>         href:"http://localhost:8080/restful/objects/
>> businessentities.Audit/2"
>>         __proto__:Object
>>     __proto__:Object
>>     location:
>>         value:
>>         href:"http://localhost:8080/restful/objects/
>> businessentities.Location/46"
>>         __proto__:Object
>>     __proto__:Object
>> __proto__:Object
>> transformRequest:[ƒ]
>> transformResponse:[ƒ]
>> url:"http://localhost:8080/restful/services/domainapp.
>> dom.BusinessEntities.AuditItemMenu/actions/create/invoke"
>> __proto__:Object
>> data:
>> asset:
>>     invalidReason:"Expected a link (because this object's type is not
>> a value) but found no 'href'"
>>     value:"{"value":{"href":"http://localhost:8080/restful/
>> objects/businessentities.Asset/52"}}"
>>     __proto__:Object
>> audit:
>>     invalidReason:"Expected a link (because this object's type is not
>> a value) but found no 'href'"
>>     value:"{"value":{"href":"http://localhost:8080/restful/
>> objects/businessentities.Audit/2"}}"
>>     __proto__:Object
>> location:
>>     invalidReason:"Expected a link (because this object's type is not
>> a value) but found no 'href'"
>>     value:"{"value":{"href":"http://localhost:8080/restful/
>> objects/businessentities.Location/46"}}"
>>     __proto__:Object
>>     x-ro-invalidReason:"Mandatory"
>> __proto__:Object
>> headers:ƒ (name)
>> arguments:(...)
>> caller:(...)
>> length:1
>> name:""
>> prototype:{constructor: ƒ}
>> __proto__:ƒ ()
>> [[FunctionLocation]]:ionic.bundle.js:23738
>> [[Scopes]]:Scopes[3]
>> status:422
>> statusText:"Unprocessable Entity"
>> __proto__:Object
>> "
>>
>>
>>
>> 2017-09-11 5:38 GMT-04:00, Stefano Cascarini <
>> [email protected]>:
>> > How about trying
>> >
>> > $http.post("
>> > http://localhost:8080/restful/services/domainapp.dom.BusinessEntities.
>> AuditItemMenu/actions/create/invoke",
>> > data)
>> >
>> > At the moment you're sending the data as url parameters rather than as
>> > a
>> > body.
>> >
>> >
>> >
>> >
>> >
>> > On Mon, Sep 11, 2017 at 8:00 AM, Dan Haywood <
>> [email protected]>
>> > wrote:
>> >
>> >> Hi Eder,
>> >> sorry no-one has come back with a quick solution for you ... I guess
>> >> we
>> >> don't have too many Angular JS experts reading.
>> >>
>> >> To confirm, is this Angular JS (or v1.x) rather than Angular (V2+) ?
>> >>
>> >> If you could upload to github a simple example with Angular JS code
>> >> that
>> >> demonstrates the issue, I'll see if I can take a look.
>> >>
>> >> Also, done it works with Postman, perhaps you could use Fiddler or
>> >> just
>> >> the
>> >> Chrome/Firefox debugging tools to see what is being sent over the
>> >> wire?
>> >>
>> >> It's also very easy to debug servers use, so you could put a
>> >> breakpoint
>> >> in
>> >> the appropriate XxxServerSideResource class to see what's being
>> >> received
>> >> in
>> >> the Postman Vs Angular cases.
>> >>
>> >> HTH
>> >> Dan
>> >>
>> >> On Sat, 9 Sep 2017, 02:13 L Eder <[email protected]> wrote:
>> >>
>> >> > What i am doing wrong or missing?
>> >> >
>> >> > Could someone give a tip on AngularJS for when invoking a create
>> >> > (POST) action ?
>> >> >
>> >> > I have currently this use case, and it works when the API method all
>> >> > args are by-value.
>> >> >
>> >> > However when the args are by-reference (object reference), i am
>> >> > unable
>> >> > to succeed it using AngularJS. But i succeed if i do it using
>> >> > Postman.
>> >> >
>> >> > The message i am getting is:
>> >> >
>> >> >         "Expected a link (because this object's type is not a value)
>> >> > but
>> >> > found no 'href'"
>> >> >
>> >> > Thanks in advance, Eder
>> >> >
>> >> >
>> >> >
>> >> > = Source Code on backend =
>> >> > AuditItemMenu.java:
>> >> > @Action(
>> >> > )
>> >> > @MemberOrder(sequence = "3")
>> >> > public AuditItem create(
>> >> >         final Audit audit,
>> >> >         final Asset asset,
>> >> >         final Location location) {
>> >> >     return auditItemrepository.create(audit, asset, location);
>> >> > }
>> >> >
>> >> >
>> >> > = Source Code on frontend =
>> >> >
>> >> > .factory('AuditItemStore', function($http, $ionicLoading, $resource)
>> >> > {
>> >> > var apiUrl = 'http://localhost:8080';
>> >> >
>> >> > // Define a resource
>> >> > var AuditItemCreate = $resource(
>> >> >   apiUrl +
>> >> > '/restful/services/domainapp.dom.BusinessEntities.
>> >> AuditItemMenu/actions/create/invoke');
>> >> >
>> >> > var list = function() {
>> >> >
>> >> >     var pendingWrites = [];
>> >> >
>> >> >     return pendingWrites;
>> >> > }
>> >> >
>> >> > var create = function(auditItem) {
>> >> >
>> >> >       var data =        {
>> >> >         "location" : {
>> >> >           "href" :
>> >> > "http://localhost:8080/restful/objects/businessentities.Location/47";
>> >> >         },
>> >> >         "asset"    : {
>> >> >             "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Asset/36";
>> >> >         },
>> >> >         "audit"    : {
>> >> >             "href" :
>> >> > "http://localhost:8080/restful/objects/businessentities.Audit/2";
>> >> >         }
>> >> >       }
>> >> >
>> >> >       // Post the new data
>> >> >       var a2 = new AuditItemCreate();
>> >> >
>> >> >       a2.$save(data)
>> >> >           .then(function(res)  { console.log("success") })
>> >> >           .catch(function(req) { console.log("error saving obj: " +
>> >> > JSON.stringify(req, null, 4)); })
>> >> >           .finally(function()  { console.log("always called") });
>> >> > };
>> >> >
>> >> >
>> >> > = Error result, as displayed by Chrome Developer Tools console =
>> >> >
>> >> > POST
>> >> > http://localhost:8080/restful/services/domainapp.dom.BusinessEntities
>> .
>> >> AuditItemMenu/actions/create/invoke?asset=%7B%22href%22:%
>> >> 22http:%2F%2Flocalhost:8080%2Frestful%2Fobjects%
>> >> 2Fbusinessentities.Asset%2F36%22%7D&audit=%7B%22href%22:%
>> >> 22http:%2F%2Flocalhost:8080%2Frestful%2Fobjects%
>> >> 2Fbusinessentities.Audit%2F2%22%7D&location=%7B%22href%22:%
>> >> 22http:%2F%2Flocalhost:8080%2Frestful%2Fobjects%
>> >> 2Fbusinessentities.Location%2F47%22%7D
>> >> > 422 (Unprocessable Entity)
>> >> >
>> >> > audititemstore.js:60 error saving obj:
>> >> > {
>> >> >     "data": {
>> >> >         "asset": {
>> >> >             "value":
>> >> > "{\"href\":\"
>> >> > http://localhost:8080/restful/objects/businessentities.Asset/36\"}";,
>> >> >             "invalidReason": "Expected a link (because this object's
>> >> > type is not a value) but found no 'href'"
>> >> >         },
>> >> >         "audit": {
>> >> >             "value":
>> >> > "{\"href\":\"
>> >> > http://localhost:8080/restful/objects/businessentities.Audit/2\"}";,
>> >> >             "invalidReason": "Expected a link (because this object's
>> >> > type is not a value) but found no 'href'"
>> >> >         },
>> >> >         "location": {
>> >> >             "value":
>> >> > "{\"href\":\"
>> >> > http://localhost:8080/restful/objects/businessentities.Location/47\
>> "}",
>> >> >             "invalidReason": "Expected a link (because this object's
>> >> > type is not a value) but found no 'href'"
>> >> >         },
>> >> >         "x-ro-invalidReason": "Mandatory"
>> >> >     },
>> >> >     "status": 422,
>> >> >     "config": {
>> >> >         "method": "POST",
>> >> >         "transformRequest": [
>> >> >             null
>> >> >         ],
>> >> >         "transformResponse": [
>> >> >             null
>> >> >         ],
>> >> >         "data": {},
>> >> >         "url": "
>> >> > http://localhost:8080/restful/services/domainapp.dom.BusinessEntities
>> .
>> >> AuditItemMenu/actions/create/invoke
>> >> > ",
>> >> >         "params": {
>> >> >             "location": {
>> >> >                 "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Location/47";
>> >> >             },
>> >> >             "asset": {
>> >> >                 "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Asset/36";
>> >> >             },
>> >> >             "audit": {
>> >> >                 "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Audit/2";
>> >> >             }
>> >> >         },
>> >> >         "headers": {
>> >> >             "Accept": "application/json, text/plain, */*",
>> >> >             "Authorization": "Basic ZG9tYWluYXBwLWFkbWluOnBhc3M=",
>> >> >             "Content-Type": "application/json;charset=utf-8"
>> >> >         }
>> >> >     },
>> >> >     "statusText": "Unprocessable Entity"
>> >> > }
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > NOTE:
>> >> >
>> >> > If i change the args, by adding 'value' in the JSON string, i still
>> >> > get the same error:
>> >> >
>> >> > var data =      {
>> >> >         "location": {
>> >> >           "value": {
>> >> >             "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Location/47";
>> >> >           }
>> >> >         },
>> >> >         "asset": {
>> >> >           "value": {
>> >> >             "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Asset/36";
>> >> >           }
>> >> >         },
>> >> >         "audit": {
>> >> >           "value": {
>> >> >             "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Audit/2";
>> >> >           }
>> >> >         }
>> >> > }
>> >> >
>> >> >
>> >> >
>> >> > POST
>> >> > http://localhost:8080/restful/services/domainapp.dom.BusinessEntities
>> .
>> >> AuditItemMenu/actions/create/invoke?asset=%7B%22value%22:%
>> >> 7B%22href%22:%22http:%2F%2Flocalhost:8080%2Frestful%
>> >> 2Fobjects%2Fbusinessentities.Asset%2F36%22%7D%7D&audit=%7B%
>> >> 22value%22:%7B%22href%22:%22http:%2F%2Flocalhost:8080%
>> 2Frestful%2Fobjects%
>> >> 2Fbusinessentities.Audit%2F2%22%7D%7D&location=%7B%22value%
>> >> 22:%7B%22href%22:%22http:%2F%2Flocalhost:8080%2Frestful%
>> >> 2Fobjects%2Fbusinessentities.Location%2F47%22%7D%7D
>> >> > 422 (Unprocessable Entity)
>> >> > audititemstore.js:60 error saving obj:
>> >> > {
>> >> >     "data": {
>> >> >         "asset": {
>> >> >             "value":
>> >> > "{\"value\":{\"href\":\"
>> >> > http://localhost:8080/restful/objects/businessentities.Asset/36\"}}";,
>> >> >             "invalidReason": "Expected a link (because this object's
>> >> > type is not a value) but found no 'href'"
>> >> >         },
>> >> >         "audit": {
>> >> >             "value":
>> >> > "{\"value\":{\"href\":\"
>> >> > http://localhost:8080/restful/objects/businessentities.Audit/2\"}}";,
>> >> >             "invalidReason": "Expected a link (because this object's
>> >> > type is not a value) but found no 'href'"
>> >> >         },
>> >> >         "location": {
>> >> >             "value":
>> >> > "{\"value\":{\"href\":\"
>> >> > http://localhost:8080/restful/objects/businessentities.Location/47\
>> "}}",
>> >> >             "invalidReason": "Expected a link (because this object's
>> >> > type is not a value) but found no 'href'"
>> >> >         },
>> >> >         "x-ro-invalidReason": "Mandatory"
>> >> >     },
>> >> >     "status": 422,
>> >> >     "config": {
>> >> >         "method": "POST",
>> >> >         "transformRequest": [
>> >> >             null
>> >> >         ],
>> >> >         "transformResponse": [
>> >> >             null
>> >> >         ],
>> >> >         "data": {},
>> >> >         "url": "
>> >> > http://localhost:8080/restful/services/domainapp.dom.BusinessEntities
>> .
>> >> AuditItemMenu/actions/create/invoke
>> >> > ",
>> >> >         "params": {
>> >> >             "location": {
>> >> >                 "value": {
>> >> >                     "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Location/47";
>> >> >                 }
>> >> >             },
>> >> >             "asset": {
>> >> >                 "value": {
>> >> >                     "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Asset/36";
>> >> >                 }
>> >> >             },
>> >> >             "audit": {
>> >> >                 "value": {
>> >> >                     "href":
>> >> > "http://localhost:8080/restful/objects/businessentities.Audit/2";
>> >> >                 }
>> >> >             }
>> >> >         },
>> >> >         "headers": {
>> >> >             "Accept": "application/json, text/plain, */*",
>> >> >             "Authorization": "Basic ZG9tYWluYXBwLWFkbWluOnBhc3M=",
>> >> >             "Content-Type": "application/json;charset=utf-8"
>> >> >         }
>> >> >     },
>> >> >     "statusText": "Unprocessable Entity"
>> >> > }
>> >> > ---------
>> >> >
>> >> > 2017-09-01 14:01 GMT-04:00, L Eder <[email protected]>:
>> >> > > Hello members:
>> >> > >
>> >> > > Could any one shed a light on this issue?
>> >> > >
>> >> > > I successful run this POST request using Postman:
>> >> > > JSON body
>> >> > > "
>> >> > >       {
>> >> > >                       "location" : {
>> >> > >               "value" : { "href":
>> >> > > "http://localhost:8080/restful/objects/businessentities.Location/46
>> "
>> >> > > }
>> >> > >                       },
>> >> > >                       "asset" : {
>> >> > >               "value" : { "href":
>> >> > > "http://localhost:8080/restful/objects/businessentities.Asset/36";
>> >> > > }
>> >> > >                       },
>> >> > >               "audit" : {
>> >> > >                       "value" : { "href":
>> >> > > "http://localhost:8080/restful/objects/businessentities.Audit/2"; }
>> >> > >                       }
>> >> > >       }
>> >> > > "
>> >> > >
>> >> > > However on javascript:
>> >> > > "
>> >> > >           var data =  {
>> >> > >             "location" : {
>> >> > >               "href" :
>> >> > > "http://localhost:8080/restful/objects/businessentities.Location/47
>> "
>> >> > >             },
>> >> > >             "asset"    : {
>> >> > >                 "href":
>> >> > > "http://localhost:8080/restful/objects/businessentities.Asset/36";
>> >> > >             },
>> >> > >             "audit"    : {
>> >> > >                 "href" :
>> >> > > "http://localhost:8080/restful/objects/businessentities.Audit/2";
>> >> > >             }
>> >> > >           }
>> >> > >
>> >> > >           // Post the new data
>> >> > >           var a2 = new AuditItemCreate();
>> >> > >           a2.$save(data);
>> >> > >         ...
>> >> > > "
>> >> > >
>> >> > > i am getting this failure (as displayed by chrome developer
>> >> > > tools):
>> >> > > "
>> >> > > data:
>> >> > > asset:
>> >> > > invalidReason:"Expected a link (because this object's type is not
>> >> > > a
>> >> > > value) but found no 'href'"
>> >> > > value:"{"href":"
>> >> > http://localhost:8080/restful/objects/businessentities.Asset/36"}";
>> >> > > __proto__:Object
>> >> > > audit:
>> >> > > invalidReason:"Expected a link (because this object's type is not
>> >> > > a
>> >> > > value) but found no 'href'"
>> >> > > value:"{"href":"
>> >> > http://localhost:8080/restful/objects/businessentities.Audit/2"}";
>> >> > > __proto__:Object
>> >> > > location:
>> >> > > invalidReason:"Expected a link (because this object's type is not
>> >> > > a
>> >> > > value) but found no 'href'"
>> >> > > value:"{"href":"
>> >> > http://localhost:8080/restful/objects/businessentities.Location/47"}";
>> >> > > __proto__:Object
>> >> > > x-ro-invalidReason:"Mandatory"
>> >> > > "
>> >> > >
>> >> > > What is wrong in this javascript code?
>> >> > >
>> >> > > Thank you very much, Eder
>> >> > >
>> >> >
>> >>
>> >
>>
>

Reply via email to