@requestbody不能在Java spring中获得属性名称的大写



我的问题是在创建对象的属性时。属性名称大写(我的问题需要)当我发送一个JSON请求使用邮差与键大写@RequestBody不能读取这些键。还有一件事我返回的主体的属性不是我想要的那样大写。我知道这个问题在于getter和setter,但不知道如何解决

我的代码


package com.truong.demo.model;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the VTP_HTDV database table.
* 
*/
@Entity
@Table(name = "VTP_HTDV")
@NamedQuery(name = "VtpHtdv.findAll", query = "SELECT v FROM VtpHtdv v")
public class VtpHtdv implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "HOOK_VTP_HTDV_SEQ", sequenceName = "HOOK_VTP_HTDV_SEQ", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HOOK_VTP_HTDV_SEQ")
private long id;
@Column(name = "ORDER_NUMBER")
private String ORDER_NUMBER;
@Column(name = "ORDER_REFERENCE")
private String ORDER_REFERENCE;
@Column(name = "ORDER_STATUSDATE")
private String ORDER_STATUSDATE;
@Column(name = "ORDER_STATUS")
private long ORDER_STATUS;
@Column(name = "STATUS_NAME")
private String STATUS_NAME;
@Column(name = "LOCALION_CURRENTLY")
private String LOCALION_CURRENTLY;
@Column(name = "NOTE")
private String NOTE;
@Column(name = "MONEY_COLLECTION")
private long MONEY_COLLECTION;
@Column(name = "MONEY_FEECOD")
private long MONEY_FEECOD;
@Column(name = "MONEY_TOTAL")
private long MONEY_TOTAL;
@Column(name = "EXPECTED_DELIVERY")
private String EXPECTED_DELIVERY;
@Column(name = "PRODUCT_WEIGHT")
private long PRODUCT_WEIGHT;
@Column(name = "ORDER_SERVICE")
private String ORDER_SERVICE;
public String getORDER_NUMBER() {
return ORDER_NUMBER;
}
public void setORDER_NUMBER(String oRDER_NUMBER) {
ORDER_NUMBER = oRDER_NUMBER;
}
public String getORDER_REFERENCE() {
return ORDER_REFERENCE;
}
public void setORDER_REFERENCE(String oRDER_REFERENCE) {
ORDER_REFERENCE = oRDER_REFERENCE;
}
public String getORDER_STATUSDATE() {
return ORDER_STATUSDATE;
}
public void setORDER_STATUSDATE(String oRDER_STATUSDATE) {
ORDER_STATUSDATE = oRDER_STATUSDATE;
}
public long getORDER_STATUS() {
return ORDER_STATUS;
}
public void setORDER_STATUS(long oRDER_STATUS) {
ORDER_STATUS = oRDER_STATUS;
}
public String getSTATUS_NAME() {
return STATUS_NAME;
}
public void setSTATUS_NAME(String sTATUS_NAME) {
STATUS_NAME = sTATUS_NAME;
}
public String getLOCALION_CURRENTLY() {
return LOCALION_CURRENTLY;
}
public void setLOCALION_CURRENTLY(String lOCALION_CURRENTLY) {
LOCALION_CURRENTLY = lOCALION_CURRENTLY;
}
public String getNOTE() {
return NOTE;
}
public void setNOTE(String nOTE) {
NOTE = nOTE;
}
public long getMONEY_COLLECTION() {
return MONEY_COLLECTION;
}
public void setMONEY_COLLECTION(long mONEY_COLLECTION) {
MONEY_COLLECTION = mONEY_COLLECTION;
}
public long getMONEY_FEECOD() {
return MONEY_FEECOD;
}
public void setMONEY_FEECOD(long mONEY_FEECOD) {
MONEY_FEECOD = mONEY_FEECOD;
}
public long getMONEY_TOTAL() {
return MONEY_TOTAL;
}
public void setMONEY_TOTAL(long mONEY_TOTAL) {
MONEY_TOTAL = mONEY_TOTAL;
}
public String getEXPECTED_DELIVERY() {
return EXPECTED_DELIVERY;
}
public void setEXPECTED_DELIVERY(String eXPECTED_DELIVERY) {
EXPECTED_DELIVERY = eXPECTED_DELIVERY;
}
public long getPRODUCT_WEIGHT() {
return PRODUCT_WEIGHT;
}
public void setPRODUCT_WEIGHT(long pRODUCT_WEIGHT) {
PRODUCT_WEIGHT = pRODUCT_WEIGHT;
}
public String getORDER_SERVICE() {
return ORDER_SERVICE;
}
public void setORDER_SERVICE(String oRDER_SERVICE) {
ORDER_SERVICE = oRDER_SERVICE;
}
public VtpHtdv() {
}
}
@RestController
@RequestMapping("/")
public class VTPostHTDVController {

@Autowired
VtpHtdvService vtpHtdvService;
Logger log = LogManager.getLogger(VTPostHTDVController.class);
@PostMapping(value = { "", "/" })
public ResponseEntity<CliResponse> vanDon(@RequestBody VtpHtdv vtpHtdv) {
HttpHeaders headers = new HttpHeaders();
CliResponse cliResponse = new CliResponse(Constants.DEFAULT_CODE, Constants.DEFAULT_DESC);
System.err.println(vtpHtdv.getORDER_NUMBER());// Data print is null
cliResponse.setData(vtpHtdv);

return ResponseEntity.ok().headers(headers).body(cliResponse);
}
}

这是我张贴的

{
"ORDER_NUMBER":"10345381626",
"ORDER_REFERENCE":"TKS1801492",
"ORDER_STATUSDATE":"13/12/2018 17:34:05",
"ORDER_STATUS":200,
"STATUS_NAME":"TEST - TEST ",
"LOCALION_CURRENTLY":"TEST ",
"NOTE":"TEST note",
"MONEY_COLLECTION":1500000,
"MONEY_FEECOD":0,
"MONEY_TOTAL":45650,
"EXPECTED_DELIVERY":"TEST 2 days",
"PRODUCT_WEIGHT":245,
"ORDER_SERVICE":"SCOD"
}

这是我返回的结果

{
"statusCode": "200",
"statusDesc": "OK",
"data": {
"expected_DELIVERY": null,
"money_COLLECTION": 0,
"order_STATUSDATE": null,
"money_FEECOD": 0,
"order_STATUS": 0,
"note": null,
"order_REFERENCE": null,
"money_TOTAL": 0,
"order_SERVICE": null,
"order_NUMBER": null,
"product_WEIGHT": 0,
"localion_CURRENTLY": null,
"status_NAME": null
}
}

我试着把对象的属性从private改为public,它们工作了。但是似乎属性不应该设置为public,对吗?

可以看到,属性的一半以小写返回,一半以大写返回,例如:order_STATUSDATE和我想要的order_STATUSDATE

Result I want

{
"statusCode": "200",
"statusDesc": "OK",
"data": {
"ORDER_NUMBER": "10345381626",
"ORDER_REFERENCE": "TKS1801492",
"ORDER_STATUSDATE": "13/12/2018 17:34:05",
"ORDER_STATUS": 200,
"STATUS_NAME": "TEST - TEST ",
"LOCALION_CURRENTLY": "TEST ",
"NOTE": "TEST note",
"MONEY_COLLECTION": 1500000,
"MONEY_FEECOD": 0,
"MONEY_TOTAL": 45650,
"EXPECTED_DELIVERY": "TEST 2 days",
"PRODUCT_WEIGHT": 245,
"ORDER_SERVICE": "SCOD"
}
}

我也有同样的问题,我认为这与此有关:https://github.com/FasterXML/jackson-databind/issues/2327

它与jackson反序列化有关,您可以在这里找到更多信息:https://www.baeldung.com/jackson-object-mapper-tutorial#2-creating-custom-serializer-or-deserializer

我通过创建一个启用MapperFeature的自定义映射器来解决这个问题。USE_STD_BEAN_NAMING特性,像这样:
@Configuration
public class MapperConfig {
@Bean
public ObjectMapper jacksonObjectMapper() {
return new ObjectMapper().setPropertyNamingStrategy(propertyNamingStrategy()).enable(MapperFeature.USE_STD_BEAN_NAMING);
}
}

希望它能帮助你找到解决办法;)

最新更新