天天看點

傳回Json時多了一對中括号,關于可變參數和簡單問題思考

今天寫接口傳回JSON資料時,遇到一個問題,是這樣的,下面是代碼示例,基于SpringData JPA

一、自己封裝的ResultBean,用于接收資料,響應給前端

package tonels.common;

import lombok.Data;

@Data
public class ResultBean {

    private String code;

    private String msg;

    private Object result;

// 這個注解是後來的解決方案,先不打開,
//    public ResultBean(String code, String msg, Object result) {
//        this.code = code;
//        this.msg = msg;
//        this.result = result;
//    }

    public ResultBean(String code, String msg, Object... result) {
        this.code = code;
        this.msg = msg;
        this.result = result;
    }

    public ResultBean(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public static ResultBean ok(){
        return new ResultBean("200","成功");
    }

    public static ResultBean ok(Object result){
        return new ResultBean("200","成功",result);
    }

    public static ResultBean ok(Object r1,Object r2,Object r3){
        return new ResultBean("200","成功",r1,r2,r3);
    }

    public static ResultBean error(){
        return new ResultBean("000", "失敗");
    }

    public static ResultBean error(String msg){
        return new ResultBean("000", msg);
    }

    public static ResultBean error(String code, String msg){
        return new ResultBean(code, msg);
    }

}      

二、這是Model定義

package tonels.model;

import lombok.Data;
import lombok.experimental.Accessors;

import javax.persistence.*;
import java.math.BigDecimal;

@Accessors(chain = true)
@Data
@Entity
@Table(name = "customers", schema = "classicmodels", catalog = "")
public class CustomersEntity {

    @Id
    @Column(name = "customerNumber")
    private Integer customerNumber;

    @Column(name = "customerName")
    private String customerName;

    @Column(name = "contactLastName")
    private String contactLastName;

    @Column(name = "contactFirstName")
    private String contactFirstName;

    @Column(name = "phone")
    private String phone;

    @Column(name = "addressLine1")
    private String addressLine1;

    @Column(name = "addressLine2")
    private String addressLine2;

    @Column(name = "city")
    private String city;

    @Column(name = "state")
    private String state;

    @Column(name = "postalCode")
    private String postalCode;

    @Column(name = "country")
    private String country;

    @Column(name = "salesRepEmployeeNumber")
    private Integer salesRepEmployeeNumber;

    @Column(name = "creditLimit")
    private BigDecimal creditLimit;

}      

三、這是controller層

package tonels.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import tonels.common.ResultBean;
import tonels.service.CustomerService;

import javax.annotation.Resource;

@RestController
@RequestMapping("/customers")
public class CustomerController {

    @Resource
    private CustomerService customerService;

    @GetMapping("/findById")
    public  ResultBean getS1(Integer id){
        return ResultBean.ok(customerService.findById(id));
    }


}      

四、這是Service層

這是基礎的Service,提供所有業務的service的公共方法,所有業務需要繼承這個Service接口

package tonels.service;

import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Set;

// V是對象,K是主鍵
public interface BaseService<T,K> {

    boolean doCreate(T vo);

    boolean doUpdate(T vo);

    boolean doRemove(Set<K> ids);

    T findById(K id);

    List<T> findAll();

    Page<T> findPages();

    List<T> findAllSplit(String column,String keyword,Integer page,Integer rows);

    Integer getCount(String column,String keyword);



}      
package tonels.service;

import tonels.model.CustomersEntity;

public interface CustomerService extends BaseService<CustomersEntity,Integer>{


}      

五、這是實作類

package tonels.service.impl;

import cn.hutool.json.JSONUtil;
import com.google.common.collect.Lists;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tonels.model.CustomersEntity;
import tonels.repository.CustomerRepo;
import tonels.service.CustomerService;
import tonels.vo.mysqlVo.*;

import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;

@Service
@Transactional
public class CustomerImpl implements CustomerService {

    @Resource
    private CustomerRepo customerRepo;

    @Override
    public List<CustomersEntity> findAll() {
        return customerRepo.findAll();
    }

    }

    @Override
    public List<CustomersVo31> hsql_31() {
//        return customerRepo.findOrdersByCust_hsql31();
        return null;
    }

    @Override
    public List<CustomersVo32> hsql_32() {
        return customerRepo.findOrdersByCust_hsql32();
    }

    @Override
    public List<CustoAndOrder> hsql_4() {
//        return customerRepo.findOrdersByCust_hsql4();
        return null;
    }

    @Override
    public boolean doCreate(CustomersEntity vo) {
        return false;
    }

    @Override
    public boolean doUpdate(CustomersEntity vo) {
        return false;
    }

    @Override
    public boolean doRemove(Set<Integer> ids) {
        return false;
    }

    @Override
    public CustomersEntity findById(Integer id) {
        Optional<CustomersEntity> byId = customerRepo.findById(id);
        return byId.orElse(null); // 函數式編碼方式
    }

    @Override
    public List<CustomersEntity> findAllSplit(String column, String keyword, Integer page, Integer rows) {
        return null;
    }

    @Override
    public Integer getCount(String column, String keyword) {
        return null;
    }

    @Override
    public Page<CustomersEntity> findPages() {
        return null;
    }
}      
package tonels.repository;

import java.util.List;
import java.util.Map;

public interface CustomerRepo extends BaseRepository<CustomersEntity,Integer> {

    
}

// 需建立包

package tonels.repository;

@NoRepositoryBean
public interface BaseRepository<T,K> extends JpaRepository<T, K>,JpaSpecificationExecutor<T>{
}      

七、項目啟動,通路localhost:1210/customers/findByid?id=103,下面是傳回資料

{
  "code": "200",
  "msg": "成功",
  "result": [
    {
      "customerNumber": 103,
      "customerName": "Atelier graphique",
      "contactLastName": "Schmitt",
      "contactFirstName": "Carine ",
      "phone": "40.32.2555",
      "addressLine1": "54, rue Royale",
      "addressLine2": null,
      "city": "Nantes",
      "state": null,
      "postalCode": "44000",
      "country": "France",
      "salesRepEmployeeNumber": 1370,
      "creditLimit": 21000
    }
  ]
}      
{
  "code": "200",
  "msg": "成功",
  "result": {
      "customerNumber": 103,
      "customerName": "Atelier graphique",
      "contactLastName": "Schmitt",
      "contactFirstName": "Carine ",
      "phone": "40.32.2555",
      "addressLine1": "54, rue Royale",
      "addressLine2": null,
      "city": "Nantes",
      "state": null,
      "postalCode": "44000",
      "country": "France",
      "salesRepEmployeeNumber": 1370,
      "creditLimit": 21000
    }
}