Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I add attributes to http request to spring controller?

I would like to test the spring controller below, which reads http request attributes and acts on them. I am able to trigger the controller code below by typing localhost:8080/someURL into my web browser. But the result is {"id":1,"content":"null and null and null"}, which indicate null values in the named request attributes. How do I send a request to a named url like localhost:8080/someURL which contains values for the specified request attributes, so that I can confirm that the receiving controller code works properly?

Here is the code for the controller:

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestPa    ram;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

@Controller
public class SomeController {

    private final AtomicLong counter = new AtomicLong();

    @RequestMapping(value = "/someURL", method=RequestMethod.GET)
    public @ResponseBody Greeting receiveSMS(HttpServletRequest req){
        String att1 = (String) req.getAttribute("att1");
        String att2 = (String) req.getAttribute("att2");
        String att3 = (String) req.getAttribute("att3");
        String total = att1 + " and " + att2 + " and " + att3;
        return new Greeting(counter.incrementAndGet(), String.format(total));
    }

    }  

Note: I am trying to recreate in Spring the PHP functionality that is given in the script at the following link. I have not written this kind of code below, if I am framing the question poorly, I would appreciate advice for reframing it. Along with a link to any example solution such as a JUNIT or other means by which to recreate the request.

like image 829
CodeMed Avatar asked Nov 26 '25 13:11

CodeMed


1 Answers

Request attributes are server-side only constructs. Try using request parameters instead:

@RequestMapping(value = "/someURL", method = RequestMethod.GET)
public @ResponseBody Greeting receiveSMS(@RequestParam("att1") String att1, @RequestParam("att2") String att2, @RequestParam("att3") String att3){
    String total = String.format("%s and %s and %s", att1, att2, att3);
    return new Greeting(counter.incrementAndGet(), total);
}

Then send a request of the form:

http://localhost:8080/someURL?att1=value1&att2=value2&att3=value3

And you should be able to read the values that you are trying to pass.

like image 69
heenenee Avatar answered Nov 29 '25 01:11

heenenee



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!