求助,我想优化这段请求代码,请问如何实现?

感觉从Map中取出值赋给对象这个步骤代码冗余

不过不知道怎么优化?

@RequestMapping(value = "/v1/update/tmPara", method={ RequestMethod.POST })

public ResponseResult updateTmParaV1 (

HttpServletRequest request,

@RequestBody Map<String, Object> tmDdDicSetMap

) {

String code = "200";

String message = "SUCCESS";

ResponseResult responseResult = new ResponseResult();

TmPara tmPara = new TmPara();

// System.out.println(tmDdDicSetMap);

tmPara.setParId(String.valueOf(tmDdDicSetMap.get("parId")));

tmPara.setParNam(String.valueOf(tmDdDicSetMap.get("parNam")));

tmPara.setParVal(String.valueOf(tmDdDicSetMap.get("parVal")));

tmPara.setRemark(String.valueOf(tmDdDicSetMap.get("remark")));

tmPara.setRecStaDat(String.valueOf(tmDdDicSetMap.get("recStaDat")));

tmPara.setRecStpFlg(String.valueOf(tmDdDicSetMap.get("recStpFlg")));

tmPara.setRecStpDat(String.valueOf(tmDdDicSetMap.get("recStpDat")));

tmPara.setRecSta(String.valueOf(tmDdDicSetMap.get("recSta")));

tmPara.setBusSta(String.valueOf(tmDdDicSetMap.get("busSta")));

int tmParaUpdateFlag = tmParaService.updateTmParaV1(tmPara);

// System.out.println("tmParaUpdateFlag == " + tmParaUpdateFlag);

if(tmParaUpdateFlag < 1) {

code = "500";

message = "FAIL";

} else {

responseResult.setData(tmPara);

}

responseResult.setCode(code);

responseResult.setMessage(message);

return responseResult;

}


回答:

既然知道冗余为啥还用 Map…
直接把 @RequestBody Map<String, Object> 换成 @RequestBody TmPara tmPara 就行了,字段名对不上加 @JsonProperty


回答:

用反射应该可以解决问题,但是性能不一定有你这么写好


回答:

你可以研究下 https://github.com/mapstruct/mapstruct

@Mapper

public interface CarMapper {

CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );

@Mapping(target = "seatCount", source = "numberOfSeats")

CarDto carToCarDto(Car car);

}

其实也是有getset,只不过这个是由mapstruct在编译时自动生成


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

也许你想要个这样的东西:『十倍程序员』Java五大对象映射框架,总有一款适合你? - 掘金 (juejin.cn)

我没用过,但从介绍来看,Orika 和 ModelMapper 用起来都比较简单。不过简单的查了一下,并没发现 ModelMapper 可以处理 Map 和 Entity 之间的转换,但是 Orika 可以(Orika 实现 Map 和 Entity 之间转换(类型不匹配) - 简书 (jianshu.com))

可以试试看。


回答:

@RequestBody Map<String, Object> tmDdDicSetMap ==> @RequestBody TmPara tmPara


回答:

我直接写吧
@RequestMapping(value = "/v1/update/tmPara", method={ RequestMethod.POST })
public ResponseResult updateTmParaV1 (

    HttpServletRequest request,

@RequestBody Map<String, Object> tmDdDicSetMap

) {

final String SUCCESS_CODE = "200";

final String SUCCESS_MESSAGE = "SUCCESS";

TmPara tmPara = new TmPara();

tmPara.setParId(String.valueOf(tmDdDicSetMap.get("parId")));

tmPara.setParNam(String.valueOf(tmDdDicSetMap.get("parNam")));

tmPara.setParVal(String.valueOf(tmDdDicSetMap.get("parVal")));

tmPara.setRemark(String.valueOf(tmDdDicSetMap.get("remark")));

tmPara.setRecStaDat(String.valueOf(tmDdDicSetMap.get("recStaDat")));

tmPara.setRecStpFlg(String.valueOf(tmDdDicSetMap.get("recStpFlg")));

tmPara.setRecStpDat(String.valueOf(tmDdDicSetMap.get("recStpDat")));

tmPara.setRecSta(String.valueOf(tmDdDicSetMap.get("recSta")));

tmPara.setBusSta(String.valueOf(tmDdDicSetMap.get("busSta")));

int tmParaUpdateFlag = tmParaService.updateTmParaV1(tmPara);

ResponseResult responseResult;

try {

responseResult = new ResponseResult();

responseResult.setData(tmParaUpdateFlag < 1 ? null : tmPara);

responseResult.setCode(tmParaUpdateFlag < 1 ? "500" : SUCCESS_CODE);

responseResult.setMessage(tmParaUpdateFlag < 1 ? "FAIL" : SUCCESS_MESSAGE);

} catch (Exception e) {

responseResult = new ResponseResult("500", "FAIL", null);

}

return responseResult;

}

以上是 求助,我想优化这段请求代码,请问如何实现? 的全部内容, 来源链接: utcz.com/p/945084.html

回到顶部