RestController JSON响应对象格式

问题描述 投票:0回答:1

我正在使用Spring Boot从存储库返回数据。我想格式化JSON,以便它与ExtJS的ajax处理配合使用。本质上,我想包括用于处理成功/失败,计数和errorMsg的属性,以及来自存储库的数据列表。

我已经尝试过创建一个从Rest Controller返回的ResponseDTO对象。

@RestController
public class AdminController {

    private static final Logger logger = LogManager.getLogger(AdminController.class);

    @Autowired
    private UserService userService;

    @Autowired
    private SecurityService securityService;

    @Autowired
    private UserValidator userValidator;

    @GetMapping("/searchUsers")
    public ResponseDTO searchUsers(String name, String active) {
        int activeFlag;
        List<User> users;
        ResponseDTO resp;
        if(active.equals("true")) {
            activeFlag = 1;
        } else activeFlag=0;

        if(StringUtils.isEmpty(name)) {
            users= userService.findAllUsers(activeFlag);
        } else {
            users= userService.findByUsernameActive(name, activeFlag);
        }   

        return new ResponseDTO(users, true);
    }
}

这是我在控制器中使用的DTO:

public class ResponseDTO {
    private boolean success;
    private int count = 0;

    private List<?> values;

    public boolean getSuccess() {
        return this.success;
    }
    public void setState(boolean st) {
        this.success=st;
    }
    public int getCount() {
        return this.count;
    }
    public void setCount(int cnt) {
        this.count=cnt;
    }

    public List<?>getValues() {
        return this.values;
    }
    public void setValues(List<?> vals) {
        this.values = vals;
    }

    public ResponseDTO(List<?> items, boolean state) {
        this.success = state;
        values = items;
        this.count = items.size();
    }
}

这是我得到的JSON的样子:

{
  "ResponseDTO": {
                    "success":true,
                    "count":2,
                    "values":[{obj1 } , { obj2}]
                 }
}

我想得到的更像是:

{
   "success" : true,
   "count" : 2,
   "values" [{obj1},{obj2}]
}

我正在使用Spring Boot和Jackson注释。我已经使用注释来忽略results数组中对象中的各个字段,但是我找不到解开ResponseDTO对象以不包括类名的方法。

spring-mvc extjs jackson
1个回答
0
投票

序列化ResponseDTO POJO时,默认情况下不应在响应中获得'ResponseDTO'。因为,根环绕功能默认情况下处于禁用状态。参见文档here。如果您有以下代码,请删除它。

mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
© www.soinside.com 2019 - 2024. All rights reserved.