[英]Spring Java Web: REST API
我從PostMan向Spring Rest Application發布數據時遇到問題。 每當發送數據時,都會出現此錯誤(HTTP狀態404:所請求的資源不可用。[
)
沒有跡象表明控制台中的代碼有錯誤。 所以我不明白為什么我仍然不能發布數據。 我已經重新檢查了一切
控制者
@Controller
public class CommerceController {
private static final Logger logger = LoggerFactory.getLogger(CommerceController.class);
private ProductService productService;
private UserService userService;
@Autowired
public void setProductService(ProductService productService) {
this.productService = productService;
}
/*//Map to store the product but later use database
Map<Integer, Product>prodData= new HashMap<Integer, Product>();*/
@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/json")
public
@ResponseBody
List home() {
System.out.println("This is the usermodel check it out: "+"Get REQUEST");
productService.runtest();
return productService.allProducts();
}
@RequestMapping("/products")
public List getProducts() {
productService.runtest();
return productService.allProducts();
}
//-------------------Create a User--------------------------------------------------------
@RequestMapping(value = "/user/", method = RequestMethod.POST, headers = "Content-Type:application/x-www-form-urlencoded")
public ResponseEntity<Void> createUser(@RequestBody UserModel user, UriComponentsBuilder ucBuilder) {
System.out.println("Creating User " + user.getName());
if (userService.isExist(user.getUsername())) {
System.out.println("A User with name " + user.getName() + " already exist");
return new ResponseEntity<Void>(HttpStatus.CONFLICT);
}
userService.createUser(user);
HttpHeaders headers = new HttpHeaders();
headers.setLocation(ucBuilder.path("/user/{id}").buildAndExpand(user.getId()).toUri());
return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
}
/*public @ResponseBody Product home(){
logger.info("Starting getDammyProduct");
product.setName("SAMSUNG TV");
product.setId(1);
product.setCreatedDate(new Date());
return product;
}*/
}
enter code here
我的web.xml
</welcome-file-list>
<servlet>
<description></description>
<display-name>commerce</display-name>
<servlet-name>commerce</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>commerce</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Bootstraps the root web application context before servlet initialization -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Calling the context listeners -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:com/javasoft/beans/config/dao-context.xml
classpath:com/javasoft/beans/config/security-context.xml
classpath:com/javasoft/beans/config/service-context.xml
</param-value>
</context-param>
</web-app>
Pom.xml
<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>com.javasoft.smartshoppers</groupId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<artifactId>Commerce</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.9.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.webflow</groupId>
<artifactId>spring-webflow</artifactId>
<version>2.4.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
</dependencies>
</project>
用戶模型
@Document(collection = "users")
public class UserModel implements UserDetails, Serializable {
@Id
private String id;
private String name;
private String username;
private String password;
private String email;
/*Spring Security UserDetails*/
private List<Role> authorities;
private boolean accountNonExpired = true;
private boolean accountNonLocked = true;
private boolean credentialsNonExpired = true;
private boolean enable = false;
/*Empty constructor*/
public UserModel() {
}
/*Constructor with fields */
public UserModel(String name, String username, String password, String email, List<Role> authorities, boolean accountNonExpired, boolean accountNonLocked, boolean credentialsNonExpired, boolean enable) {
this.name = name;
this.username = username;
this.password = password;
this.email = email;
this.authorities = authorities;
this.accountNonExpired = accountNonExpired;
this.accountNonLocked = accountNonLocked;
this.credentialsNonExpired = credentialsNonExpired;
this.enable = enable;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public List<Role> getAuthorities() {
return authorities;
}
public void setAuthorities(List<Role> authorities) {
this.authorities = authorities;
}
@Override
public boolean isAccountNonExpired() {
return accountNonExpired;
}
public void setAccountNonExpired(boolean accountNonExpired) {
this.accountNonExpired = accountNonExpired;
}
@Override
public boolean isAccountNonLocked() {
return accountNonLocked;
}
public void setAccountNonLocked(boolean accountNonLocked) {
this.accountNonLocked = accountNonLocked;
}
@Override
public boolean isCredentialsNonExpired() {
return credentialsNonExpired;
}
public void setCredentialsNonExpired(boolean credentialsNonExpired) {
this.credentialsNonExpired = credentialsNonExpired;
}
public void setEnable(boolean enable) {
this.enable = enable;
}
@Override
public boolean isEnabled() {
return enable;
}
}
獲取請求成功,但是在發布時出現404錯誤。 我已經記錄了post方法,並且已經確認它不是bieng調用的方法。 有人可以指出我在哪里做錯了,或者遺漏了什么嗎?
嘗試改變
@RequestMapping(value = "/user/", method = RequestMethod.POST, headers = "Content-Type:application/x-www-form-urlencoded")
至
@RequestMapping(value = "/user", method = RequestMethod.POST, headers = "Content-Type:application/x-www-form-urlencoded")
或設置
<servlet-mapping>
<servlet-name>commerce</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
至
<servlet-mapping>
<servlet-name>commerce</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
該網址區分大小寫。 由於web.xml中的內容是小寫commerce
,因此URL中應該包含該內容。
您還應該像其他人所說的那樣對users
斜線。
如果錯誤仍然存在,則可以從tomcat或IDE中打開應用程序主頁,以確保URL應該是哪種格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.