java 传回下拉框数字_关于JavaDate数据返回到前端变数字的问题(并引申到前后端时间的传输)...

不知道为什么,前端显示的所有数据项都没有错,就只有时间那一项很奇怪,是一串数字,而且这个数字在数据库怎么都找不到……

ec1d969eb72522640167236f63b72253.png

然后我在后端从service到controller都debug了一遍,发现数据都没有错,拿的都是时间啊。

后来百度知道,原来后台在返回json数据的时候,用自身的序列化机制会把时间变成一段很长的数字,就像上面的显示一样。

然后这里就要用到一个东西:

@JsonFormat,它的作用是,出参时,自动把Date型对象数据转化成正确的格式化后的字符串出去

1d246e83fa10bd12cfc99ac742c180c2.png

效果:

df8ab512a8b070d6d79437094f392bcd.png

然后又通过度娘知道,还有个注解

@DateTimeFormat

这个是用于将前台传到后台字符串变量转换为Date类型。请求报文只需要传入yyyymmddhhmmss字符串进来,则自动转换为Date类型数据。(不过好像前端要传的是json)

这里也有个小例子:

前端只传了一个 格式正确的  时间字符串

48304ba5e6f9fe08f3fa1abda7d326ab.png

layer.open({

type : 2,

title : '归档详情',

//btn: ['选中', '取消'],

shade : false,

area : [ '900px', '600px' ],

maxmin : true,

content : gateUrl.UiUrl + '/productbaseEdition?eTime='

+ edition.table.bootstrapTable('getSelections')[0].eTime,// 这里content是一个URL,如果你不想让iframe出现滚动条,你还可以content:['http://sentsin.com', 'no']

end : function() {

}

});

48304ba5e6f9fe08f3fa1abda7d326ab.png

这里就只是在请求url那里拼接了一个  eTime上去。

然后后台一开始直接用Date接,毫无疑问,无法成功,然后就用了这个@DateTimeFormat

看后端代码:

48304ba5e6f9fe08f3fa1abda7d326ab.png

@Controller

@RequestMapping("")

public class ProductbaseEditionController extends BaseController {

@GetMapping("/productbaseEdition")

public String productbaseEdition(@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")Date eTime) {

System.out.println("#################test time:"+eTime);

return "productbaseEdition/list";

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

接收成功!(这里不是json数据,然后用注解@JsonFormat似乎不能成功接收)

不过也有资料说,@JsonFormat不仅可以完成后台到前台参数传递的类型转换,还可以实现前台到后台类型转换。当content-type为application/json时,优先使用@JsonFormat的pattern进行类型转换。而不会使用@DateTimeFormat进行类型转换。

然后我也根据这个做了几个实验,

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

//@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")

private Date eTime;//归档时间,也是归档的版本号

这是实体里面的一个属性,前端传用json传数据过来,然后Controller用这个实体来接收

48304ba5e6f9fe08f3fa1abda7d326ab.png

var data = {};

data.id = edition.currentItem.id;

data.eTime = edition.currentItem.eTime;

layer.confirm('确定删除这个归档版本吗?', null, function (index) {

$.ajax({

url: edition.baseUrl + "/editionDelete",

type: "POST",

data:JSON.stringify(data),

headers : {

'Content-Type' : 'application/json;charset=utf-8'

},

success: function (data) {

console.log(data);

if (data.code == '0') {

layerTips.msg("删除成功!");

edition.refresh();

} else {

layerTips.msg("删除失败!")

}

}

});

layer.close(index);

});

48304ba5e6f9fe08f3fa1abda7d326ab.png

结论是:

1.前端如果传来的是json数据,时间格式是正确的,那么@JsonFormat是可以正确将其转换成Date类型的。

2.前端如果传来的是json数据,时间格式是正确的,那么@DateTimeFormat是可以正确将其转换成Date类型的。

3.但是,用json出参时用注解@DateTimeFormat似乎行不通,就是前面的问题,json返回Date对象时,java的序列化会把date变成一串数字,然后@dataTimeFormat似乎无法解决这个问题。

结论:

1.如果前后端传的数据都是json,那么后台接数据,传数据都可以用@JsonFormat。

2.@DateTimeFormat适合后端  接收   前端传来的数据,不管是不是json都可以正确转换成Date型数据,只要前端传来的格式正确且后端@DateTimeFormat的pattern写正确了,但是这个注解无法将Date型数据用json传到后端去。

Java返回前端下拉框数据通常可以通过以下步骤实现: 1. 创建一个Java类,用于表示下拉框的选项。该类可以包含两个属性:选项的值和选项的显示文本。例如: ```java public class DropdownOption { private String value; private String text; public DropdownOption(String value, String text) { this.value = value; this.text = text; } // 省略getter和setter方法 } ``` 2. 在后端的Java代码,创建一个方法来获取下拉框数据。该方法可以返回一个包含DropdownOption对象的列表,表示下拉框的选项。例如: ```java public List<DropdownOption> getDropdownOptions() { List<DropdownOption> options = new ArrayList<>(); options.add(new DropdownOption("1", "Option 1")); options.add(new DropdownOption("2", "Option 2")); options.add(new DropdownOption("3", "Option 3")); // 添加更多选项... return options; } ``` 3. 在前端页面,通过调用后端接口获取下拉框数据。可以使用Ajax或其他方式发送请求,并将返回数据渲染到下拉框。例如,使用jQuery的Ajax方法: ```javascript $.ajax({ url: "/getDropdownOptions", // 后端接口的URL method: "GET", success: function(data) { // 渲染下拉框数据 for (var i = 0; i < data.length; i++) { var option = $("<option>").val(data[i].value).text(data[i].text); $("#dropdown").append(option); } } }); ``` 以上是一种常见的实现方式,通过后端Java代码返回一个包含下拉框选项的列表,然后在前端页面使用Ajax获取数据并渲染到下拉框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值