Solved

Weird problem on redirect in spring controller

Posted on 2012-03-14
4
1,433 Views
Last Modified: 2012-03-19
I have a weird issue in a spring controller (Spring vs 3.1.1).  I am redirecting to a URL and the dispatcher servlet cannot resolve the handler method.  It works when I click a link in the JSP but its broke when I create the redirect URL.  The URL's that are created look identical but there is some difference because I can copy and paste one into a new browser tab and it works and the other one I cannot.

This method gets called fine via clicking a link on the UI.  Here are the logs.

 2012-03-14 11:54:38,091 DEBUG [org.springframework.web.servlet.DispatcherServlet] Flow Id:e38704d2-bcb1-4d81-981a-8bf3a7f9b7a2 Flow Name:Unknown - <DispatcherServlet with name 'appServlet' processing GET request for [/storedashboard/shelfLocation/view]>
2012-03-14 11:54:38,091 DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Flow Id:e38704d2-bcb1-4d81-981a-8bf3a7f9b7a2 Flow Name:Unknown - <Looking up handler method for path /shelfLocation/view>
2012-03-14 11:54:38,091 DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Flow Id:e38704d2-bcb1-4d81-981a-8bf3a7f9b7a2 Flow Name:Unknown - <Returning handler method [public org.springframework.web.servlet.ModelAndView com.xxxx.xxxx.store.dashboard.controller.ShelfLocationController.view(long)]>
2012-03-14 11:54:38,091 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] Flow Id:e38704d2-bcb1-4d81-981a-8bf3a7f9b7a2 Flow Name:Unknown - <Returning cached instance of singleton bean 'shelfLocationController'>
2012-03-14 11:54:38,091 DEBUG [org.springframework.web.servlet.DispatcherServlet] Flow Id:e38704d2-bcb1-4d81-981a-8bf3a7f9b7a2 Flow Name:Unknown - <Last-Modified value for [/storedashboard/shelfLocation/view] is: -1>

Open in new window



The code for the link in the jsp looks like this:
<a target="_blank" href="<c:url value="/shelfLocation/view?shelfLocationId='+shelfLocationId+'"/>">

Open in new window


The controller handling it looks like this:
    @RequestMapping(value = "/view", method = RequestMethod.GET)
    public ModelAndView view(@RequestParam(value = "shelfLocationId", required = true)
    final long id)
    {
		//stuff omitted for brevity
        return new ModelAndView("cms/shelfLocation", "shelfLocationFormBean", shelfLocationFormBean);
    }

Open in new window


Now all of that works fine but when I try to redirect to that url I get a 404.  Here is the controller method doing the redirecting:

 @RequestMapping(value = "/createShelfDisplay", method = RequestMethod.POST)
    public String createShelfDisplay(ShelfLocationFormBean mediaUploadForm, BindingResult result)
    {
		//stuff omitted for brevity
        UriComponents redirectUri = UriComponentsBuilder.fromPath("/shelflocation/view")
            .queryParam("shelfLocationId", shelfLocation.getId()).build().encode();
        return "redirect:"
            + redirectUri.toUriString();

    }

Open in new window


Now the dispatcher servlet cannot figure out the mapping see the logs:
	2012-03-14 11:42:24,853 DEBUG [org.springframework.web.servlet.DispatcherServlet] Flow Id:f02cb747-be90-4702-8a1d-5dbc2bb1536c Flow Name:CMS: Create Shelf Display - <DispatcherServlet with name 'appServlet' processing GET request for [/storedashboard/shelflocation/view]>
2012-03-14 11:42:24,853 DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Flow Id:f02cb747-be90-4702-8a1d-5dbc2bb1536c Flow Name:CMS: Create Shelf Display - <Looking up handler method for path /shelflocation/view>
2012-03-14 11:42:24,853 DEBUG [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping] Flow Id:f02cb747-be90-4702-8a1d-5dbc2bb1536c Flow Name:CMS: Create Shelf Display - <Did not find handler method for [/shelflocation/view]>
2012-03-14 11:42:24,853 WARN [org.springframework.web.servlet.PageNotFound] Flow Id:f02cb747-be90-4702-8a1d-5dbc2bb1536c Flow Name:CMS: Create Shelf Display - <No mapping found for HTTP request with URI [/storedashboard/shelflocation/view] in DispatcherServlet with name 'appServlet'>

Open in new window


The below link is generated on the redirect and does not work.  I cannot copy and paste this into a new browser tab and get in my handler method.
http://localhost:8080/storedashboard/shelflocation/view?shelfLocationId=1000 

The below link is generated from the href link in the jsp.  It does work.  I can copy and paste it into a new tab on my browser and get into my handler method.
http://localhost:8080/storedashboard/shelfLocation/view?shelfLocationId=1000

What am I doing wrong?
0
Comment
Question by:Mr_Oz
  • 3
4 Comments
 
LVL 7

Expert Comment

by:gudii9
ID: 37721022
0
 
LVL 1

Author Comment

by:Mr_Oz
ID: 37721172
I think its an issue with the URL encoding or something I guess I do not see the relevance with any of the links you have given.  Also I am using 3.1.1 some of the information you posted is not even applicable doing things the Spring 3.1.1 way.  Also I do not have any file extensions, I don't know where you got that from.
0
 
LVL 1

Accepted Solution

by:
Mr_Oz earned 0 total points
ID: 37721665
Arrgh I spent all day on this.  Apparently I had c+p the word 'redirect:' from something into eclipse and that was the problem typing it out into the IDE fixed the problem.  it was a fluke there is no problem with the code.
0
 
LVL 1

Author Closing Comment

by:Mr_Oz
ID: 37736805
this was a c+p fluke.  When copying and pasting into the ide somethign weird had happened but was not apparent by looking at it.
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
json example 39 134
listing all functions in JavaScript 19 179
mockito example issue 8 64
Opening PDF on button click and fill new document 2 21
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
I had a project requirement for a displaying a user workbench .This workbench would consist multiple data grids .In each grid the user will be able to see a large number of data. These data grids should allow the user to 1. Sort 2. Export the …
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now