@GetMapping("item")
public @ResponseBody String get(@ModelAttribute Item item)
Item
विशेषताओं(वसंत MVC/जैक्सन) @ModelAttribute को मानचित्रण क्वेरी पैरामीटर: SNAKE_CASE को LOWERCASE_WITH_UNDERSCORE विफल रहता है
name
itemType
जब मैं है /item?name=foo&item_type=bar
का उपयोग करें item
केवल name
itemType
साथ नहीं साथ आबादी वाले हो जाता है।
मैंने itemType
विशेषता item_type
से मैप किए गए गुण प्राप्त करने के लिए चीजों का एक गुच्छा करने की कोशिश की।
- जोड़ा गया @JsonProperty ("item_type")
Item
केitemType
विशेषता के अंदर। Described here। - एक JackonConfiguration PropertyNamingStrategy.SNAKE_CASE को propertyNamingStrategy सेट है कि जोड़ा गया। Described here।
- जोड़ा गया spring.jackson.property-नामकरण-रणनीति मेरी स्प्रिंग बूट करने के लिए = SNAKE_CASE फ़ाइल application.properties। Described here
Item
वर्ग स्तर पर PropertyNamingStrategy जोड़ा गया। Described here।
मैं यह कैसे हल कर सकते हैं?
Btw। मुझे केवल Item
के आउटगोइंग JSON क्रमबद्धता के लिए यह समस्या नहीं है।
अद्यतन 04/24/17:
एक न्यूनतम नमूना नीचे समस्या प्रदर्शित करने के लिए: /item
पर जाकर जब आप कि 'outgoing' JSON क्रमबद्धता काम करता है देखेंगे लेकिन यह करता है /item/search?name=foo&item_type=bar
पर जाकर जब 'आने वाले' JSON deserialization के लिए काम नहीं करते हैं।
आइटम
package sample;
import java.io.Serializable;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
@JsonNaming(SnakeCaseStrategy.class)
public class Item implements Serializable {
private String name;
@JsonProperty("item_type")
private String itemType;
public Item() { }
public Item(String name, String itemType) {
this.name = name;
this.itemType = itemType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getItemType() {
return itemType;
}
public void setItemType(String itemType) {
this.itemType = itemType;
}
}
ItemController.java
package sample;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/item")
public class ItemController {
@GetMapping("search")
public @ResponseBody Page<Item> search(@ModelAttribute Item probe) {
System.out.println(probe.getName());
System.out.println(probe.getItemType());
//query repo by example item probe here...
return null;
}
@GetMapping
public Item get() {
return new Item("name", "itemType");
}
}
JacksonConfiguration.java
package sample;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
@Configuration
public class JacksonConfiguration {
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
return new Jackson2ObjectMapperBuilder()
.propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
}
}
SampleBootApplication.java
package sample;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SampleBootApplication {
public static void main(String[] args) {
SpringApplication.run(SampleBootApplication.class, args);
}
}
application.properties
logging.level.org.springframework=INFO
spring.profiles.active=dev
spring.jackson.property-naming-strategy=SNAKE_CASE
पोम।एक्सएमएल
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sample</groupId>
<artifactId>sample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<exclusions>
<exclusion>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<!-- Spring Boot Actuator displays build-related information if a META-INF/build-info.properties
file is present -->
<goals>
<goal>build-info</goal>
</goals>
<configuration>
<additionalProperties>
<encoding.source>${project.build.sourceEncoding}</encoding.source>
<encoding.reporting>${project.reporting.outputEncoding}</encoding.reporting>
<java.source>${maven.compiler.source}</java.source>
<java.target>${maven.compiler.target}</java.target>
</additionalProperties>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
यदि आपके पास कहीं @EnableWebMvc एनोटेशन है, तो इसे हटा दें। रेफरी: http://stackoverflow.com/questions/40649177/jackson-is-ignoring-spring-jackson-properties-in-my-spring-boot-plication –
कोई भी नहीं है। – hansi