Java控制器在实时服务器上显示404错误

时间:2019-04-01 05:25:23

标签: java hibernate spring-boot

我正在服务器上设置Java Web应用程序,但其余控制器显示 404错误

在我的本地系统上一切正常。

这是我在Java hibernate spring中的第一个项目。

下面是我的代码:

UserLoginController.java

package org.jasyatra.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.jasyatra.model.User;
import org.jasyatra.model.LoginAuthToken;
import org.jasyatra.service.UserLoginService;
import org.jasyatra.service.LoginAuthTokenService;

@RestController
public class UserLoginController {

    @Autowired
    UserLoginService userLoginService;

    @Autowired
    LoginAuthTokenService loginAuthTokenService;

    @RequestMapping(value = "/user/login", method = RequestMethod.POST, headers = "Accept=application/json")
    public Map login(@RequestBody User parameters) {
        List<User> loginResponse = userLoginService.login(parameters);

        Map<String, String> response = new HashMap<>();

        if (loginResponse.size() > 0) {
            response.put("result", "true");
            response.put("id", Integer.toString(loginResponse.get(0).getId()));
            response.put("type", loginResponse.get(0).getType());
            response.put("firstName", loginResponse.get(0).getFirstName());
            response.put("lastName", loginResponse.get(0).getLastName());
            response.put("permissions", loginResponse.get(0).getPermissions());
            List<LoginAuthToken> responseToken = loginAuthTokenService.getLatestToken(loginResponse.get(0).getId(),loginResponse.get(0).getType());
            response.put("token", responseToken.get(0).getToken());
        } else {
            response.put("result", "false");
            response.put("message", "Invalid mobile no or password!");
        }

        return response;
    }
}

UserLoginDAO.java

package org.jasyatra.dao;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.jasyatra.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.jasyatra.service.HashService;

@Repository
public class UserLoginDAO {

    @Autowired
    private SessionFactory sessionFactory;

    public List<User> login(User parameters) {
        Session session = this.sessionFactory.getCurrentSession();

        Query query = session.createQuery("from User where mobileNo=:mobileNo and password=:password and status=:status");
        query.setParameter("mobileNo", parameters.getMobileNo());
        query.setParameter("password", HashService.getHash(parameters.getPassword(), "SHA1"));
        query.setParameter("status", "active");
        List<User> response = query.list();
        return response;
    }
}

UserLoginService.java

package org.jasyatra.service;

import java.nio.charset.Charset;
import java.util.Date;
import java.util.List;
import java.util.Random;
import org.jasyatra.dao.UserLoginDAO;
import org.jasyatra.dao.LoginAuthTokenDAO;
import org.jasyatra.model.LoginAuthToken;
import org.jasyatra.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserLoginService {

    @Autowired
    UserLoginDAO userLoginDao;

    @Autowired
    LoginAuthTokenDAO loginAuthTokenDAO;

    @Autowired
    LoginAuthTokenService loginAuthTokenService;

    @Transactional
    public List<User> login(User parameters) {

        List<User> login = userLoginDao.login(parameters);
        LoginAuthToken loginAuthToken = new LoginAuthToken();
        if (login.size() > 0 && login.get(0).getId() > 0) {
            try {

                loginAuthToken.setLoginId(login.get(0).getId());
                loginAuthToken.setLoginType(login.get(0).getType());

                byte[] array = new byte[7]; // length is bounded by 7
                new Random().nextBytes(array);
                String generatedString = new String(array, Charset.forName("UTF-8"));

                String token = HashService.getHash(generatedString, "SHA1");
                loginAuthToken.setDateCreated(new Date());
                loginAuthToken.setToken(token);
                loginAuthTokenService.save(loginAuthToken);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return login;
    }
}

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/"/>

spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
             xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <annotation-driven />

    <resources mapping="/resources/**" location="/resources/" />

    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <beans:property name="url" value="jdbc:mysql://localhost:3306/jasyatra" />
        <beans:property name="username" value="root" />
        <beans:property name="password" value="" />
    </beans:bean>

    <!-- Hibernate 4 SessionFactory Bean definition -->
    <beans:bean id="hibernate4AnnotatedSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="annotatedClasses">
            <beans:list>
                <beans:value>org.jasyatra.model.User</beans:value>
            </beans:list>
        </beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
            </beans:props>
        </beans:property>
    </beans:bean>
    <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <beans:property name="maxUploadSize" value="268435456"/>
    </beans:bean>
    <context:component-scan base-package="org.jasyatra" />

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />
    </beans:bean>
</beans:beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>Archetype Created Web Application</display-name>
    <servlet>
 <servlet-name>spring</servlet-name>
 <servlet-class>
  org.springframework.web.servlet.DispatcherServlet
 </servlet-class>
 <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
 <servlet-name>spring</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

我遇到的主要问题是,它能够运行index.jsp,但不能运行控制器。可能是什么问题?

请指引我正确的方向。

谢谢

2 个答案:

答案 0 :(得分:0)

您无法在浏览器中打开该URL,因为它是POST服务,您只能在浏览器中打开GET URL。您需要在点击该网址的同时添加正文以进行测试 您的服务可以使用邮递员。

答案 1 :(得分:0)

    no need to send "Accept" header this way, you can use however following attribute instead if you expect a json body with the post request :

    @RequestMapping(value = "/user/login", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE);

if you want to get "Accept" header value of your request you can get it like : 
    public Map login(@RequestBody User parameters,@RequestHeader(value="Accept") String accept){  
    ....