다음과 같은 오류를 마주했다.
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1523, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1509, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/usr/local/lib/python3.9/site-packages/flask_restx/api.py", line 403, in wrapper
resp = resource(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/flask/views.py", line 84, in view
return current_app.ensure_sync(self.dispatch_request)(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/flask_restx/resource.py", line 49, in dispatch_request
resp = meth(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/flask_restx/marshalling.py", line 268, in wrapper
return marshal(
File "/usr/local/lib/python3.9/site-packages/flask_restx/marshalling.py", line 58, in marshal
out, has_wildcards = _marshal(data, fields, envelope, skip_none, mask, ordered)
File "/usr/local/lib/python3.9/site-packages/flask_restx/marshalling.py", line 189, in _marshal
out = OrderedDict(items) if ordered else dict(items)
File "/usr/local/lib/python3.9/site-packages/flask_restx/marshalling.py", line 180, in <genexpr>
else __format_field(k, v)
File "/usr/local/lib/python3.9/site-packages/flask_restx/marshalling.py", line 174, in __format_field
value = field.output(key, data, ordered=ordered)
File "/usr/local/lib/python3.9/site-packages/flask_restx/fields.py", line 356, in output
return [marshal(value, self.container.nested)]
AttributeError: 'String' object has no attribute 'nested
처음엔 헤맸는데 자세히 보니 marshal 오류를 확인할 수 있었다.
MVC 패턴을 적용하기 위해 marshal_with( ... )에서 선언한 데이터 포맷과 실제 리턴되는 값이 맞지 않는 것이었다.
marshal_with 데코레이터는 응답 형식을 지정하고, 선언한 이름과 속성으로 JSON 객체를 반환하게 한다.
이때 선언한 테이터 타입을 맞춰주어야한다.
구체적으로 나는 아래와 같이 List<String> 타입으로 marshal 데코레이터에서 각 필드를 선언했다.
하지만 BrowseAll 클래스 리턴되는 몇 필드 값이 String으로 반환되는 오류를 범했기에 marshal 오류가 발생했던 것이다.
보면 result = ~ 를 보면 String 타입인 os, vendor, product 변수로 들어가 있었다.
따라서 [ ] 로 묶어주어 List로 반환될 수 있도록 했다~ 오류 끝
댓글