Angular $resource does not parse correctly an integer response

后端 未结 4 1683
别那么骄傲
别那么骄傲 2020-12-17 00:32

I am using the Angular $resource to make requests to my controllers, implemented on a Spring application. When the controller returns just an Integer value, $resource parse

相关标签:
4条回答
  • 2020-12-17 01:08

    Maybe try setting the responseType in the action config, like this:

    $resource(url, {}, {
        get: {
            method: 'GET',
            responseType: 'text'
        }
    });
    

    If that doesn't work you probably need to use transformResponse or an $http interceptor to modify the response before the resource gets a hold of it. See $http docs.

    0 讨论(0)
  • 2020-12-17 01:09

    I know this is a little old, but I just ran into a similar problem and someone pointed me in the right direction.

    If your server is sending back a JSON encoded resonse, but you only pass it a single value (191 in your case), $resource seems to interpret it as a string, which it is then splitting into an array of individual characters (I'm not 100% on the technical details of why, but that was my experience). So what you need to do is send back your value wrapped inside of a JSON object.

    So, instead of doing something like:

    function callback(req, res) {
        var number = 191;  // this is just for example purposes
        res.json(number);
    }
    

    You need to do something like:

    function callback(req, res) {
        var number = 191;  // again, just for an example
        res.json({ value: number });
    }
    

    Then when your $resource call comes back, just access the value property of the response and you should be good to go.

    P.S. The examples here are based on a Node/Express back end, not Spring, but I think this should still apply.

    0 讨论(0)
  • 2020-12-17 01:09

    I've actually found this to be an issue with integers, strings, and bools.

    If you are using WebAPI, do something like this:

    public object ControllerMethod(<PARAMS>)
    {
        <LOGIC>
        return new { value = <PUT YOUR VALUE HERE> };
    }
    

    If Node, use CodeLander's answer.

    In your Angular code, you'll just have to get the .value of what's returned.

    0 讨论(0)
  • 2020-12-17 01:14

    Set isArray: false in the $resource method definition.

    0 讨论(0)
提交回复
热议问题