Java:映射并设置为大写

时间:2019-02-19 17:21:35

标签: java spring rest spring-boot

在我的 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"

建议?

2 个答案:

答案 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);