我正在使用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对象以不包括类名的方法。
序列化ResponseDTO POJO时,默认情况下不应在响应中获得'ResponseDTO'。因为,根环绕功能默认情况下处于禁用状态。参见文档here。如果您有以下代码,请删除它。
mapper.enable(SerializationFeature.WRAP_ROOT_VALUE);