Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有ember命名空间的JSON视图_Json_Spring_Jackson_Fasterxml - Fatal编程技术网

带有ember命名空间的JSON视图

带有ember命名空间的JSON视图,json,spring,jackson,fasterxml,Json,Spring,Jackson,Fasterxml,我正在使用SpringMVC和org.springframework.web.servlet.view.json.MappingJackson2JsonView从控制器返回json对象,要与ember RestAdapter集成,我需要返回带有名称空间的json。我该怎么做? 目前我有以下控制器,它返回一个对象(JSON),可以是客户ID列表或客户对象列表 @RequestMapping(method = RequestMethod.GET) @ResponseBody public Objec

我正在使用SpringMVC和org.springframework.web.servlet.view.json.MappingJackson2JsonView从控制器返回json对象,要与ember RestAdapter集成,我需要返回带有名称空间的json。我该怎么做? 目前我有以下控制器,它返回一个对象(JSON),可以是客户ID列表或客户对象列表

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public Object getCustomer(HttpServletRequest request, HttpServletResponse response) {
   if (request.getQueryString()!=null){
       List<Integer> customerIdList = new ArrayList<Integer>();
       customerIdList = customerDao.findAllCustomerIds();
       return customerIdList;
   } else {
       List<Customer> customerList = new ArrayList<Customer>();
       customerList = customerDao.findAllCustomers();
       return customerList ;
   }
}
否则

我想要的结果是

if I include query string,
 { customers : [ 1,2,3 ] };
else 
 { customers : [
                {
                   id: "1",
                   name: "ABC Pty Ltd"
                 },
                { 
                   id: "2",
                   name: "XYZ Ltd"
                 },
                {
                   id: "3",
                   name: "Hello "
                 }
               ]
 }

我如何才能做到这一点?

试着将结果放在地图上:

Map<String, List> result = new HashMap<>();      
if (request.getQueryString() != null) {
    List<Integer> customerIdList = customerDao.findAllCustomerIds();
    result.put("customers", customerIdList);
} else {
    List<Customer> customerList = customerDao.findAllCustomers();
    result.put("customers", customerList);
}
return result;
Map result=newhashmap();
if(request.getQueryString()!=null){
List customerIdList=customerDao.findAllCustomerIds();
结果。put(“客户”,客户列表);
}否则{
List customerList=customerDao.findAllCustomers();
结果。put(“客户”,客户列表);
}
返回结果;

另外请注意,GET可以返回两种不同的内容(ID列表或customares列表)。这可能表明您的API设计中有异味。

这增加了一个额外的步骤,但很有效,我希望序列化程序可以这样做,而且对于单个实体返回,名称空间值也丢失了,我需要将实体包装在一个新实体中,以便可以生成名称空间,但我不喜欢这种方法,应该有一种干净的方法,示例I do like CustomerResponse c=新CustomerResponse(客户);并将JSON的CustomerResponseThink作为对象表示法返回。也就是说,如果您的对象是客户的集合,那么您将得到
[1,2,3]
,但是如果您的对象的属性customers是客户的集合(您称之为命名空间),那么您将得到
{customers:[1,2,3]}
if I include query string,
 { customers : [ 1,2,3 ] };
else 
 { customers : [
                {
                   id: "1",
                   name: "ABC Pty Ltd"
                 },
                { 
                   id: "2",
                   name: "XYZ Ltd"
                 },
                {
                   id: "3",
                   name: "Hello "
                 }
               ]
 }
Map<String, List> result = new HashMap<>();      
if (request.getQueryString() != null) {
    List<Integer> customerIdList = customerDao.findAllCustomerIds();
    result.put("customers", customerIdList);
} else {
    List<Customer> customerList = customerDao.findAllCustomers();
    result.put("customers", customerList);
}
return result;