在我的 spring boot 应用程序下,我使用了这种全面服务的方法:
@RequestMapping(value = "objects/{objectId}", method = RequestMethod.GET)
public HttpEntity<ObjectDTO > getStoreById(@PathVariable("objectId") String storeId) throws DomainResourceNotFoundException {
Object obj= ObjService.getObjById(objectId).orElseThrow(
() -> new DomainResourceNotFoundException(Store.class.getSimpleName(), objectId));
ObjectDTO objDTO = CustomMapperFactory.getMapper().map(obj, ObjectDTO .class);
return new ResponseEntity<>(objDTO , HttpStatus.OK);
}
我的问题是在映射时,结果对象** objDTO **的格式如下:
"attributeone": "aaa"
"attributetWO": "bbb"
我的目的是在将“属性名称”映射为这种格式时转换为大写:
"ATTRIBUTEONE": "aaa"
"ATTRIBUTEOTWO": "bbb"
建议?
答案 0 :(得分:1)
JSON键反映StoreDTO中的属性名称。根据用于序列化的库,您可以使用@JSONProperty
(对于使用最多的Jackson,com.fasterxml.jackson.annotation.JsonProperty
)覆盖属性名称:
@JSONProperty("ATTRIBUTEONE")
private String attributeone;
如果要对所有属性执行此操作,则可以使用以下方法:
objectMapper.setPropertyNamingStrategy(
new PropertyNamingStrategy.UpperCamelCaseStrategy()
)
但是结果将是ATTRIBUTE_ONE
,而不是ATTRIBUTEONE
。如果您确实需要ATTRIBUTEONE
,则可以实施自己的策略。
答案 1 :(得分:1)
执行此操作的通用方法是扩展并使用自己的PropertyNamingStrategy
,例如:
@SuppressWarnings("serial")
PropertyNamingStrategy pns = new PropertyNamingStrategy.PropertyNamingStrategyBase() {
@Override
public String translate(String propertyName) {
return propertyName.toUpperCase();
}
};
ObjectMapper om = new ObjectMapper();
om.setPropertyNamingStrategy(pns);