首页 > 其他分享 >返回Json时多了一对中括号,关于可变参数和简单问题思考

返回Json时多了一对中括号,关于可变参数和简单问题思考

时间:2022-11-09 14:06:36浏览次数:39  
标签:return String private Json ResultBean 中括号 import 时多 public


今天写接口返回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;
}
}

六、Repository层

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
}
]
}

注意到实际返回的单个对象被 中括号[ ]包裹起来了,会造成前端取数据的不方便,原因是ResultBean封装的问题,那个可变参数构造函数问题,把注释部分解开,即可返回正确数据

{
"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
}
}

代码简单,但是结构和包较多,可能会出现少依赖和配置错误的问题,这里不详细介绍了

标签:return,String,private,Json,ResultBean,中括号,import,时多,public
From: https://blog.51cto.com/u_15870196/5836248

相关文章

  • 泛型的类型擦除后,fastjson反序列化时如何还原?
    铺垫我们选择​​fastjson​​来进行反序列化的测试,在测试前先定义一个实体类:@DatapublicclassFoo<T>{privateStringval;privateTobj;}如果大家对泛型的类型......
  • 使用jwt鉴权(jsonwebtoken)
    1.下载jsonwebtokennpmi-Sjsonwebtoken2.引用constjwt=require('jsonwebtoken');3.需要设置秘钥constsecretKey='3.14159263528542852651268541';4.设......
  • js jsonp
    同源策略(浏览器的一种机制)概述:浏览器为了安全,他产生了一种同源策略,这个策略是为了防止一些恶意的请求,保护对应的隐私.同源策略主要是对应三个内容分别问同协议......
  • mysql根据json字段内容作为查询条件(包括json数组)检索数据
    最近用到了mysql5.7的json字段的检索查询,发现挺好用的,记录一下笔记我们有一个日志表,里面的data字段是保存不同对象的json数据,遇到想根据里面的json的字段内容作为条件查询......
  • 我的朋友因为 JSON.stringify 差点丢了奖金
    英文|https://medium.com/frontend-canteen/my-friend-almost-lost-his-year-end-bonus-because-of-json-stringify-9da86961eb9e翻译|杨小爱这是发生在我朋友身上的真......
  • 6.Json交互处理
    6.Json交互处理1.什么是JsonJSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储......
  • JSONPath 处理特殊字符
    JSONPath处理特殊字符先来看看jsonpath的基础语法$表示文档的根元素@表示文档的当前元素.node_name或['node_name']匹配下级节点[index]检索数组中的元......
  • vscode常用配置的json文件
    {"editor.parameterHints":true,"editor.quickSuggestions":{"other":true,"comments":true,"strings":true},"wind......
  • webpack中配置CSS兼容性时报错 Failed to parse package.json data
      是因为在package.json中添加了注释正确webpack配置CSS兼容性的步骤:npmipostcss-loaderpostcss-preset-env-D/webpack.config.jsmodule:{    ru......
  • Long数据类型序列化Json后传递给前端,产生的精度丢失的问题解决
    问题产生的原因Long类型的数据,如果我们在后端将结果序列化为json,直接传给前端的话,在Long长度大于17位时会出现精度丢失的问题。java中的long能表示的范围比js中number大,......