Пружинный ботинок 406 "Недопустимо" - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь собрать RESTful API с помощью Spring Boot, версия которого 2.0.5.RELEASE. Вот мой контроллер:

// Just for test
@RestController
public class LoginController {

    @RequestMapping(value = "/user/login",method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> login(@RequestParam(name = "username") String username,
                                   @RequestParam(name = "password") String password) {

        ResponseEntity<RESTResponse> response = null;

        if(username.equals("123") && password.equals("123")){
            // success
            response = new ResponseEntity<>(RESTResponse.generateResponse(
                    null, "successful", "Log in successfully."), HttpStatus.OK);
        } else {
            // failed
            response = new ResponseEntity<>(RESTResponse.generateResponse(
                    null, "failed", "Your username or password is incorrect."), HttpStatus.OK);
        }

        return response;
    }

}

А это класс конфигурации Spring MVC:

@Configuration
public class MyMvcConfig implements WebMvcConfigurer{

    /**
     * CORS configuration
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins(ALL)
                .allowedMethods(ALL)
                .allowedHeaders(ALL)
                .allowCredentials(true);
    }


}

Контроллер должен отвечать на данные JSON. Я использовал Почтальон, чтобы проверить контроллер. Контроллер мог получить параметры запроса и работать должным образом, но почтальон получил странный ответ:

{
    "timestamp": "2018-09-16T05:55:14.860+0000",
    "status": 406,
    "error": "Not Acceptable",
    "message": "Could not find acceptable representation",
    "path": "/api/user/login"
}

Может ли кто-нибудь помочь?

Ответы [ 3 ]

0 голосов
/ 16 сентября 2018

Вы можете реализовать Фильтр Интерфейс

и установить заголовок всеми методами можно принять

@Component
public class CORSFilter implements Filter{


     static Logger logger = LoggerFactory.getLogger(CORSFilter.class);

     @Override
        public void init(FilterConfig filterConfig) throws ServletException {
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse res, FilterChain chain) throws IOException, ServletException {
              HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
            chain.doFilter(request, response);
            logger.info(request.getRemoteAddr());
        }

        public void destroy() {}



}
0 голосов
/ 16 сентября 2018

убедитесь, что у вас есть эти банки и используйте заголовок Accept: application/json в заголовках почтальона

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.1.1</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>
0 голосов
/ 16 сентября 2018

Убедитесь, что вы используете Accept: application/json в заголовке почтальона.

Если это сделано, попробуйте добавить consumes= MediaType.APPLICATION_JSON_VALUE также в сигнатуру метода вместе с производителями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...